2010-12-14 113 views
3

J'ai un programme qui convertit une chaîne de date et d'heure irrégulière dans un système DateTime.C# Comment convertir une chaîne de date et d'heure irrégulière en DateTime?

Cependant, comme le système ne reconnaît pas les chaînes irrégulières, les méthodes .ParseExact, toDateTime et TryParse n'ont pas fonctionné.

Il n'y a que deux types de chaînes de temps de date à laquelle le programme doit convertir:

Thu Dec 9 05:12:42 2010 
Mon Dec 13 06:45:58 2010 

S'il vous plaît noter que la date unique a un double interligne que je l'ai utilisé la méthode .replace pour convertir la date unique à Thu Dec 09 05:12:42 2010.

Quelqu'un peut-il vous conseiller sur les codes? Merci!

Les codes:

 String rb = re.Replace(" ", " 0"); 

     DateTime time = DateTime.ParseExact(rb, "ddd MMM dd hh:mm:ss yyyy", CultureInfo.CurrentCulture); 

     Console.WriteLine(time.ToString("dddd, dd MMMM yyyy HH:mm:ss")); 

Répondre

5

Je voudrais vraiment éviter regex et utiliser ce que (méthode TryParseExact et date formats) est déjà intégré dans .NET:

DateTime result; 
string dateToParse = "Thu Dec 9 05:12:42 2010"; 
string format = "ddd MMM d HH:mm:ss yyyy"; 

if (DateTime.TryParseExact(
    dateToParse, 
    format, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AllowWhiteSpaces, 
    out result) 
) 
{ 
    // The date was successfully parsed => use the result here 
} 
+0

@Darin: Le regex est là que pour extraire le date d'une plus grande chaîne. Voir sa [question précédente] (http://stackoverflow.com/questions/4426597/c-how-to-retrieve-a-certain-text-located-within-a-string). – AgentConundrum

+0

@AgentConundrum, de ce que je peux voir qu'il utilise regex pour remplacer les espaces dans un la chaîne d'origine, en ajoutant 0 au début de la journée, etc ... des choses qui n'est pas nécessaire avec une chaîne de format correct. –

+0

@Darin: Vous avez raison. J'ai glacé juste au-dessus de la deuxième regex. Désolé pour ça. – AgentConundrum

0

Vous devriez saisir les parties de votre datetime dans des groupes de capture dans l'objet Match, puis reconstituez-les comme vous le souhaitez.

Vous pouvez utiliser cette instruction avec des groupes nommés Regex pour le rendre plus facile

((?<day>)\w{3})\s+((?<month>)\w{3})\s+((?<date>)\d)\s((?<time>)[0-9:]+)\s+((?<year>)\d{4}) 
+0

êtes-vous sérieux? –

0

Ceci est un exemple de code que vous pouvez essayer:

 var str = "Thu Dec 9 06:45:58 2010"; 
     if (str.IndexOf(" ") > -1) 
     { 
      str = str.Replace(" ", " "); 
      DateTime time = DateTime.ParseExact(str, "ddd MMM d hh:mm:ss yyyy", null); 
     } 
     else 
     { 
      DateTime time = DateTime.ParseExact(str, "ddd MMM dd hh:mm:ss yyyy", null); 
     }