12 votes

Pourquoi DateTime.Now.ToString("u") ne fonctionne-t-il pas ?

Je suis actuellement en L'heure d'été britannique qui est UTC +1 heure. J'ai confirmé que mon PC est correct avec le code suivant et il renvoie vrai.

System.TimeZone.CurrentTimeZone.IsDaylightSavingTime(Date.Now)

Ma question est donc de savoir pourquoi le formateur UTC ne fonctionne pas comme prévu :

DateTime.Now.ToString("u")

Il renvoie la date exacte du système actuel comme ci-dessous au format UTC comme prévu mais avec le Z ( Le temps des Zoulous ) à la fin et non +01:00 ?

c'est-à-dire

2009-05-27 14:21:22Z

pas

2009-05-27 14:21:22+01:00

Cette fonctionnalité est-elle correcte ?

23voto

Patrick McDonald Points 20645

MSDN indique ce qui suit :

Représente une chaîne de format de date et d'heure personnalisée définie par la propriété DateTimeFormatInfo.UniversalSortableDateTimePattern. Le modèle reflète une norme définie et la propriété est en lecture seule. Par conséquent, il est toujours le même, quelle que soit la culture utilisée ou le fournisseur de format fourni. La chaîne de format personnalisée est "yyyy'-'MM'-'dd HH':'mm':'ss'Z'".

Lorsque ce spécificateur de format standard est utilisé, l'opération de formatage ou d'analyse syntaxique utilise toujours la culture invariante.

Le formatage ne convertit pas le fuseau horaire pour l'objet date et heure. Par conséquent, l'application doit convertir une date et une heure en temps universel coordonné (UTC) avant d'utiliser ce spécificateur de format.

Vous devez utiliser le code suivant pour convertir votre date actuelle en UTC avant de la formater :

DateTime.UtcNow.ToString("u")

o

DateTime.Now.ToUniversalTime().ToString("u")

Pour afficher la date dans le format attendu (c'est-à-dire 2009-05-27 14:21:22+01:00), vous devez utiliser un format de date personnalisé :

DateTime.Now.ToString("yyyy-MM-dd HH:mm:sszzz");

7voto

Rowland Shaw Points 22860

"u" est le modèle universel de date/heure triable, et non le format UTC ; Pour citer le documentation :

Représente une chaîne de format de date et d'heure personnalisée définie par la propriété DateTimeFormatInfo..: :.UniversalSortableDateTimePattern. Le modèle reflète une norme définie et la propriété est en lecture seule. Par conséquent, elle est toujours la même, quelle que soit la culture utilisée ou le fournisseur de format fourni. La chaîne de format personnalisée est "yyyy'-'MM'-'dd HH':'mm':'ss'Z'".

Lorsque ce spécificateur de format standard est utilisé, l'opération de formatage ou d'analyse syntaxique utilise toujours la culture invariante.

Le formatage ne convertit pas le fuseau horaire pour l'objet date et heure. Par conséquent, l'application doit convertir une date et une heure en temps universel coordonné (UTC) avant d'utiliser ce spécificateur de format.

4voto

Badaro Points 1746

Vous devez utiliser DateTime.Now.ToUniversalTime().ToString("u").

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