9
votes

.NET DateTime.parse

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
    


2 commentaires

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. :)


7 Réponses :


2
votes

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)


1 commentaires

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.



11
votes

parse Prend en compte les paramètres régionaux (culture du fil actuel). Par conséquent, j'utiliserais parseexact et Spécifiez le format correct explicitement avec une culture invariante (ou la culture dont vous avez besoin, par exemple. en-nous , pour AM / PM).


0 commentaires

2
votes

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:

DateTime.parseexact ()


0 commentaires

24
votes

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);


5 commentaires

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?



3
votes

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"));
    }
}


0 commentaires

1
votes

i second @LUCERO, parse utilise les informations de culture du fil actuel, etc. Voir aussi la direction opposée: A Tostring Question Dans ce contexte.


0 commentaires

0
votes

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"));
}


2 commentaires

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.