Lorsque vous essayez d'utiliser la méthode d'analyse sur la classe code> DateTime CODE>, je reçois une exception lancée:
String n'a pas été reconnu comme une date d'heure valide. P> blockQuote>
- La chaîne se lit comme
"26/10/2009 8:47:39 AM" code> lorsque sorté. LI>
- Cette chaîne est obtenue à partir d'un groupe d'une correspondance d'une regex. Li>
- Aucune des chaînes obtenues à partir de ce groupe de match n'utilisera à DateTime. LI> ul>
Exemples d'autres chaînes: P>
26/10/2009 8:47:39 AM 26/10/2009 8:00:41 AM 26/10/2009 7:48:35 AM
7 Réponses :
La culture a-t-elle changé sur la machine? 26/10/2009 est une bonne date du Royaume-Uni mais une mauvaise date américaine (par exemple) p>
Cela avait effectivement viennent de me survenir pour moi. DateTime.Parse semble avoir une surcharge pour le format de temps culturel. J'essaie juste de savoir comment l'utiliser maintenant :) Merci pour votre aide.
parse code>
Prend en compte les paramètres régionaux (culture du fil actuel). Par conséquent, j'utiliserais parseexact code>
et Spécifiez le format correct explicitement avec une culture invariante (ou la culture dont vous avez besoin, par exemple. en-nous code>, pour AM / PM). P>
appelez DateTime.parse () avec la culture comme paramètre ou appelez DateTime.parseexact () avec la date, le format exact de la date à analyser et la culture: P>
Analyse des chaînes dans DateTime code> L'objet est presque toujours une douleur. Si vous savez être certain qu'ils auront toujours le format comme vos exemples, cela devrait fonctionner:
string input = "26/10/2009 8:00:41 AM";
DateTime dateTime = DateTime.ParseExact(input, "dd/MM/yyyy h:mm:ss tt", CultureInfo.InvariantCulture);
J'écris cette même réponse.
Bien que j'allais ajouter des informations sur les paramètres régionaux (mondialisation) qui affectent l'analyse de la date.
@Vinko: Ainsi, je l'ai aussi. C'est la partie de la douleur. ;) Non, sérieusement, il s'agit d'une zone assez complexe qui est une source de problèmes courante. J'ai écrit une sorte de réponse lengté sur le sujet il y a un moment: Stackoverflow.com/questions/1437454/date- Problème de format
@ Fredrikmörk J'utilise cette solution, l'entrée Strings est correctement formée, mais ma variable DateTime est en train de régler le 1/1/0001 12:00:00, je l'utilise dans .NET 4.5, avez-vous une idée mec ?
@Guillonon Qu'est-ce que votre chaîne d'entrée et votre chaîne de format ressemblent?
Vous utilisez probablement la mauvaise culture. Le mois ne peut pas être 26, il n'y a donc pas un horodatage américain. Cela fonctionne bien que:
using System; using System.Globalization; class Program { static void Main(string[] args) { DateTime dateTime = DateTime.Parse("26/10/2009 8:47:39 AM", CultureInfo.GetCultureInfo("en-GB")); } }
i second @LUCERO, parse code> utilise les informations de culture du fil actuel, etc. Voir aussi la direction opposée: A
Tostring code> Question Dans ce contexte. P>
Je dois résoudre un format de date vraiment étrange provenant d'un autre système ... Dans cet exemple, c'est pour le format espagnol ...
string input="07/06/2019 07:01:54 p. m."; public static DateTime ParseSpanishDate(string input) { string normalized = input.Replace("a. m.", "AM").Replace("p. m.", "PM"); normalized = normalized.Replace("12:00:00 AM", "00:00:00 AM"); return DateTime.Parse(normalized, CultureInfo.GetCultureInfo("es")); }
Lorsque vous avez une nouvelle question, veuillez poser une nouvelle question. Cet espace est réservé aux réponses uniquement - la plupart des gens ne verront pas votre question.
Désolé, je viens de mettre une solution qui a travaillé pour moi avec des dates d'espagnol.
Est-ce que vos paramètres locaux sont correctement définis dans Windows?
Yeh, mais l'application était en cours de fonctionnement, et le profil de l'utilisateur exécutant le service n'a pas fait. :)