2015-10-01 4 views
1

Je suis en train d'obtenir une chaîne d'un objet DateTime utilisant le code C# suivant sur 4.5 .NET:DateTime.ToString() ne fonctionne pas bien pour motif personnalisé et les paramètres système non par défaut

var dateTime = new DateTime(2015, 9, 30); 
var str = dateTime.ToString("M/d/yyyy"); 

Console.WriteLine(str); 

Sous circonstances normales, la sortie de ce code est le 30/09/2015, comme prévu. Cependant, si je vais dans Panneau de configuration, Région et Langue et changez le motif "Date courte" pour l'anglais américain en "jj-MMM-yy", le code ci-dessus affichera soudainement 9-30-2015!

enter image description here

Est-ce que quelqu'un sait pourquoi cela se passe et comment il peut fixe/travaillé autour? Notez, par exemple, que si je choisis dans la région et la langue un autre modèle de date courte tel que "M/j/aa", le code fonctionne correctement.

Répondre

3

/ dans votre chaîne de format est traitée comme séparateur de date et remplacée par le séparateur défini dans Paramètres régionaux. Vous devez lui échapper avec \ (\\, pour être précis)

+0

Vous voulez dire comme ceci: 'dateTime.ToString (" M \\/d \\/yyyy ")'? –

+0

Oui, comme ça. –

+0

Oui, cela fonctionne correctement maintenant. Merci beaucoup pour votre solution rapide! –