9 votes

.NET DateTime.Parse

Lorsque l'on essaie d'utiliser la méthode d'analyse (parse) sur l'élément DateTime j'obtiens une exception :

String n'a pas été reconnu comme un DateTime valide.

  • La chaîne se lit comme suit "26/10/2009 8:47:39 AM" lorsqu'elle est émise.
  • Cette chaîne est obtenue à partir d'un groupe sur la base d'une correspondance avec une expression rationnelle.
  • Aucune des chaînes obtenues à partir de ce groupe de correspondance ne sera analysée en datetime.

Exemples d'autres chaînes :

26/10/2009 8:47:39 AM
26/10/2009 8:00:41 AM
26/10/2009 7:48:35 AM

Ce qui est étrange, c'est que je suis sûr que cela a déjà fonctionné auparavant.

25voto

Fredrik Mörk Points 85694

Analyse des chaînes de caractères en DateTime est presque toujours pénible. Si vous êtes certain qu'ils auront toujours le même format que 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);

12voto

Lucero Points 38928

Parse prend en compte les paramètres régionaux (culture du fil conducteur). Par conséquent, j'utiliserais ParseExact et spécifier explicitement le format correct avec une culture invariante (ou la culture dont vous avez besoin, par ex. en-US pour AM/PM).

3voto

Mark Byers Points 318575

Vous utilisez probablement la mauvaise culture. Le mois ne peut pas être 26, il ne s'agit donc pas d'un horodatage américain. Ceci fonctionne cependant :

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

2voto

Pharabus Points 4664

La culture a-t-elle changé sur la machine ? 26/10/2009 est une bonne date pour le Royaume-Uni, mais une mauvaise date pour les États-Unis (par exemple).

2voto

Justin Niessner Points 144953

Soit vous appelez DateTime.Parse() avec la culture en paramètre, soit vous appelez DateTime.ParseExact() avec la date, le format exact de la date à analyser et la culture :

DateTime.ParseExact()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X