10 votes

.NET DateTime ne retourne pas AM/PM dans ToShortTimeString()

J'ai rencontré un problème qui me rend fou. Dans mon application (ASP.NET MVC2 / .NET4), j'exécute simplement ceci :

DateTime.Now.ToShortTimeString()

Tous les exemples que j'ai vus indiquent que je devrais obtenir quelque chose comme : 12:32 PM mais je reçois 12:32 sans l'AM/PM.

J'ai lancé LinqPad 4 pour voir si je pouvais reproduire ce phénomène. Au lieu de cela, il renvoie 12:32 PM correctement.

C'est quoi ce bordel ?

12voto

Darin Dimitrov Points 528142

Vous pouvez également essayer un format personnalisé pour éviter les confusions propres à chaque culture :

DateTime.Now.ToString("hh:mm tt")

4voto

Martin Points 7782

KBrimington semble avoir raison :

La chaîne renvoyée par la méthode ToShortTimeString est sensible à la culture. Elle reflète le modèle défini par l'objet DateTimeFormatInfo de la culture actuelle. Par exemple, pour la culture en-US, le modèle standard d'heure courte est "h:mm tt" ; pour la culture de-DE, il est "HH:mm" ; pour la culture ja-JP, il est "H:mm". La chaîne de format spécifique d'un ordinateur particulier peut également être personnalisée afin qu'elle diffère de la chaîne de format standard de l'heure courte.

De MSDN

3voto

AllenG Points 6242

Si vous ne souhaitez pas modifier la culture de l'ensemble de votre fil de discussion/application, essayez ceci :

CultureInfo ci = new CultureInfo("en-US");
string formatedDate = DateTime.Now.ToString("t", ci);

Vous pouvez trouver la liste des chaînes du format DateTime. aquí .

1voto

palswim Points 4353

Oui, cela dépend de votre Locale. Quelle est la valeur de System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortTimePattern dans votre application ?

Ver Lien MSDN

1voto

Jesper Palm Points 5280

Vous pouvez définir les informations relatives à la culture du fil et celles-ci seront ensuite utilisées par la méthode ToShortTimeString(). Mais comprenez que cela affectera tout le code exécuté dans ce thread.

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us");

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