J'ai une application WP8, qui enverra l'heure actuelle à un service Web.
J'obtiens la chaîne datetime en appelant
DateTime.ToString("MM/dd/yyyy HH:mm:ss.fff")
Pour la plupart des utilisateurs, cela fonctionne très bien et me donne la chaîne correcte comme "09/10/2013 04:04:31.415"
. Mais pour certains utilisateurs, la chaîne résultante est quelque chose comme "09/14/2013 07.20.31.371"
, ce qui pose problème dans mon service Web.
Est-ce à cause d'un problème de format culturel? Comment puis-je m'assurer que la chaîne de résultat est délimitée par deux points au lieu d'un point?
c#
windows-phone-8
Eldorado
la source
la source
Réponses:
Oui. Votre utilisateur doit appartenir à une culture où le séparateur d'heure est un point. Les deux ":" et "/" sont interprétés d'une manière sensible à la culture dans des formats de date et d'heure personnalisés .
Je suggère de préciser
CultureInfo.InvariantCulture
:Alternativement, vous pouvez simplement citer les séparateurs d'heure et de date:
... mais cela vous donnera des résultats "intéressants" auxquels vous ne vous attendez probablement pas si vous faites fonctionner des utilisateurs dans une culture où le système de calendrier par défaut n'est pas le calendrier grégorien. Par exemple, prenez le code suivant:
Cela produit la sortie (le 18 septembre 2013) de:
Je suppose que votre service Web en serait surpris!
Je suggérerais en fait non seulement d'utiliser la culture invariante, mais également de passer à un format de date ISO-8601:
Il s'agit d'un format plus accepté dans le monde entier - il est également triable et rend l'ordre du mois et du jour évident. (Alors que le 06/07/2013 pourrait être interprété comme le 7 juin ou le 6 juillet selon la culture du lecteur.)
la source
useUserOverride
paramètre sur false, sinon certains paramètres utilisateur peuvent remplacer les paramètres de culture. Par exemple dans votre cas, je suggère d'utiliser newCultureInfo("ar-SA", false)
.:
a une signification particulière: c'est le séparateur de temps. ( Chaînes de format de date et d'heure personnalisées ).Utilisez
\
pour y échapper:Ou utilisez
CultureInfo.InvariantCulture
:Je suggérerais d'aller avec le deuxième, car il
/
a également une signification particulière (c'est le séparateur de date. ), Vous pouvez donc avoir des problèmes avec cela aussi.la source
Vous pouvez utiliser InvariantCulture car votre utilisateur doit être dans une culture qui utilise un point au lieu d'un deux-points:
la source
Je suis tombé sur ce problème récemment avec Windows 10 dans une autre direction et j'ai trouvé la réponse de @JonSkeet très utile pour résoudre mon problème.
J'ai également fait quelques recherches supplémentaires avec un formulaire de test et j'ai constaté que lorsque la culture actuelle était définie sur
"no"
ou"nb-NO"
à l'exécution (Thread.CurrentThread.CurrentCulture = new CultureInfo("no");
), l'appel ToString ("aaaa-MM-jj HH: mm: ss") répondait différemment dans Windows 7 et Windows 10. Il a renvoyé ce que j'attendais dans Windows 7 et HH.mm.ss dans Windows 10!Je pense que c'est un peu effrayant! Depuis que je croyais qu'une culture était une culture dans n'importe quelle version de Windows au moins.
la source
Vous pouvez utiliser String.Format:
la source
Convertir la date en chaîne
Utiliser l'espace de nom
Code
la source