J'ai des vieux fichiers journaux que je dois analyser - apparemment la date de la date a été enregistrée comme suit: 18/12/2012 11:09:39 P.M. - Toutes mes tentatives d'analyse ont échoué. Je suis complètement perdu sur cela - toute aide ou direction serait géniale!
CultureInfo cultureInfo = new CultureInfo( "es-MX" , true );
string date = "18/12/2012 11:09:39 p.m.";
DateTime dt = new DateTime( 2012 , 12 , 18 , 11 , 9 , 39 ).AddHours( 12 );
this.richTextBox1.Text += date + Environment.NewLine;
this.richTextBox1.Text += dt.ToString( cultureInfo ) + Environment.NewLine;
this.richTextBox1.Text += dt.ToString() + Environment.NewLine;
foreach ( var item in richTextBox1.Lines )
{
try
{
DateTime d= DateTime.Parse( item );
this.richTextBox1.Text += d.ToString() + Environment.NewLine ;
}
catch ( Exception ee)
{
this.richTextBox1.Text += ee.Message + Environment.NewLine ;
}
}
4 Réponses :
Essayez d'utiliser denttime.trypseexact (). Voici un exemple que j'ai couru à Linqpad.
Cela échoue aussi - pas différent du code que j'ai posté .... d = {1/1/1/0001 12:00:00 AM} - Je suppose que la trypairs échoue ...
@BillyDVD Il suffit de copier, collé et couru dans Linqpad et il a couru correctement. Essayez de faire ça.
Essayez d'utiliser votre variable de cultureInfo comme deuxième paramètre d'analyse. Cela utilisera la culture comme fournisseur de format.
@Nicholas - Malheureusement, je n'ai pas étendu les commentaires sous la question initiale avant de soumettre. Tony Hopkinson l'a posté avant nous deux.
Ajout de cela donne l'exception: la chaîne n'a pas été reconnue comme une date d'heure valide. Il y a un mot inconnu à partir de l'index 20.
Sommes-vous toujours simplement analysant cet exemple ou essayez-vous d'analyser les fichiers journaux que vous travaillez?
Le problème est que vous ne spécifiez pas la culture à utiliser dans votre appel à analyser (). Votre invocation utilise la propriété actuelle du fil actuel:
CultureInfo mexico = CultureInfo.GetCultureInfo( "es-MX" ); Thread.CurrentThread.CurrentCulture = mexico;
Produit toujours l'exception: la chaîne n'a pas été reconnue comme une date d'heure valide. Il y a un mot inconnu à partir de l'index 20.
@BillyDVD, avez-vous vérifié les caractères réels dans la chaîne de défaillance? Le décalage +20 dans votre chaîne d'échantillon est la minuscule «P» dans p.m. code>. Je suis prêt à être que vous avez de mauvaises données quelque part. Avez-vous plusieurs espaces intégrés dans la chaîne? Vous voudrez peut-être vous détendre la manipulation de WhitSpace avec l'une des surcharges code> () code> qui prend en charge la spécification de DateTimeMestyle code>.
Certaines dates sont correctes dans le ou les fichiers journaux que certains ont le formatage impair qui se termine par p. m. ou p.m .. Toutes les méthodes ci-dessus semblent échouer - et oui je les ai essayés tous :( C'était mon hack / solution pour le problème:
CultureInfo cultureInfo = new CultureInfo( "es-MX" , true );
Date = DateTime.Parse( date.Replace( "p. m." , "PM" ).Replace( "p.m." , "PM" ).Replace( "." , "" ).ToUpper() , cultureInfo );
TOUJOURS B> ... Eh bien ... dans une culture spécifique. +1
Vous attrapez l'exception, non? Qu'est-ce que c'est?
50% du temps, mon code fonctionne 100% du temps.
@Brian pendant quelques secondes après avoir lu votre commentaire, je fais que c'était le commentaire de l'Op ... Wow ..
@Brian extra lolz supposant que votre nom de famille est Fontana.
'ERM DateTime.Parse (article, cultureInfo) peut-être ..
L'exception est: la chaîne n'a pas été reconnue comme une date d'heure valide.