Pourquoi ne peut-DateTime.ParseExact() analyser “9/1/2009” à l'aide “M/d/yyyy”

J'ai une chaîne qui ressemble à ceci: "9/1/2009". Je veux le convertir en un objet DateTime (à l'aide de C#).

Cela fonctionne:

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

Mais je ne comprends pas pourquoi cela ne fonctionne pas:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

Il n'y a pas de mot dans la date (comme "septembre"), et je sais que le format spécifique, donc je préfère utiliser ParseExact (et je ne vois pas pourquoi CultureInfo serait nécessaire). Mais je reçois le redoutable "la Chaîne n'a pas été reconnu comme un DateTime valide" exception.

Grâce

Un peu de suivi. Ici sont 3 approches que le travail:

DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

Et voici 3 qui ne fonctionnent pas:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

Donc, Parse() fonctionne avec des "en-US", mais pas ParseExact... Inattendu?

  • Quelle est la version de .NET vous aide? Lorsque j'exécute la deuxième ligne ci-dessus dans PowerShell v2 sur Win7, il fonctionne très bien.
  • Je suis en utilisant .net 3.5 sur xp . La culture par défaut est fr-fr.
  • Dans la chaîne "M/d/yyyy", chaque barre oblique / est remplacé par le culture.DateTimeFormat.DateSeparator chaîne. Quand vous donnez null que le format de la santé, la culture actuelle est utilisé. Maintenant, il dépend de la culture actuelle a "/" ou une autre chaîne (comme "-" ou ".") comme sa DateSeparator.
InformationsquelleAutor Jimmy | 2009-09-02