web-dev-qa-db-fra.com

Comprendre le format d'heure UTC spécifique YYYY-MM-DDTHH: MM: SS.SSSZ

J'ai deux questions connexes.

Supposons qu'un programme exécuté en BST génère une valeur date-heure pour l'heure actuelle au format UTC YYYY-MM-DDTHH: MM: SS.SSSZ

Supposons également que l'heure actuelle à Londres est le 2016-06-01 12:33:54

1) si l'heure actuelle donnée par le programme est 2016-06-01T11: 33: 54.000Z, le programme est-il incorrect?

2) comment le décalage d'été pour BST est noté dans le format d'heure correspondant pour AAAA-MM-JJTHH: MM: SS.SSSZ

Je suppose YYYY-MM-DDTHH: MM: SS + 0001 Ai-je raison?

9
QVSJ

Veuillez tout d'abord lire les informations de l'iso8601. Il devient de plus en plus courant de traiter les heures dans différents fuseaux horaires (par exemple, le fuseau horaire du serveur et le fuseau horaire du client) et la norme est vraiment utile.

Veuillez lire en particulier l'heure UTC ou "Zulu" ici .

1) Le programme est correct, car l'heure de Londres a une heure d'avance sur l'heure "UTC" en été

2) Le "Z" de fin est une notation courte pour UTC (Zulu). Vous pouvez également écrire "+00: 00" au lieu de "Z". Le SS.SSS fait référence aux secondes et millisecondes - sans rapport avec le fuseau horaire. Dans le commentaire de devnull, il vous montre comment appliquer un décalage pour l'été.

Modifier :

Il y a eu une discussion dans les commentaires pour savoir si le fuseau horaire iso8601 inclut le fuseau horaire ou non, et si le fuseau horaire sera en fait imprimé.

Cela dépend complètement de la mise en œuvre de la date/heure. Si nous utilisons SimpleDateFormat, le fuseau horaire est pris en charge et sera imprimé.

Voici un exemple de code pour illustrer

SimpleDateFormat formatter = new SimpleDateFormat("YYYY-MM-dd'T'HH:mm:ss.SSSXXX");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(formatter.format(new Date()));
formatter.setTimeZone(TimeZone.getTimeZone("Europe/London"));
System.out.println(formatter.format(new Date()));

Production

2016-06-02T12:53:14.924Z
2016-06-02T13:53:14.925+01:00

Naturellement, si vous utilisez une bibliothèque de date/heure différente telle que joda-time, les détails d'implantation seront différents.

8
vikingsteve