2009-09-28 4 views
0

Je souhaite convertir une chaîne en données. Voici mon code:Problème de format de date entre l'application et les fenêtres avec C#

DateTime? dt = null; 
dt = DateTime.Parse(postdate[i]); 

Il ne fonctionne que pour jj/mm/aaaa, pas au travail pour mm/jj/aaaa parce que sur mon ordinateur le format de date est définie comme jj/mm/aaaa dans le Panneau de configuration. Donc, si je veux utiliser l'application, acceptez toujours le format valide mm/jj/aaaa, quel que soit le réglage du format de date de Windows. Comment implémenter ceci dans le code C#?

+1

Ceci est la raison pour laquelle nous devons tous être en utilisant exclusivement aaaa-mm-dd ... – bobince

Répondre

5

Je pense que cela devrait fonctionner:

DateTime? dt = null; 
    dt = DateTime.ParseExact(postdate[i], "MM/dd/yyyy", System.Globalization.CultureInfo.CurrentCulture); 
+0

-1: mm/jj/aaaa doit être mM/jj/aaaa, et ce ne fonctionnera pas dans toutes les cultures (par exemple, DE-DE) Voir ma réponse – Joe

+0

@Joe: a réparé, comme il devrait en effet être MM/jj/aaaa. Et comme vous le dites, il serait préférable d'utiliser la culture invariante – JDunkerley

+0

très intéressant. si utiliser le format jj/mm/aaaa, le 01/30/2009 sera converti en 01/01/2009 – KentZhou

1

Vous pouvez faire quelque chose comme ceci:

IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime myDateTime = DateTime.Parse(myDateTimeValue, culture); 

Au lieu d'analyser avec la culture par défaut (qui est basée sur les paramètres régionaux de l'ordinateur), il analyser avec la culture américaine qui utilise MM/jj/aaaa

1

@ La réponse de JDunkerley est sur la bonne voie, mais:

  • Le spécificateur de format pour un mois à 2 chiffres est MM non mm.

  • en utilisant CultureInfo.CurrentCulture analysera pas correctement une chaîne contenant separtors slash si vous êtes sous une culture qui utilise un séparateur différent (par exemple:. La culture de-DE s'attendra un séparateur de période

cela fonctionne:

dt = DateTime.ParseExact(postdate[i], "MM/dd/yyyy", 
System.Globalization.CultureInfo.InvariantCulture);