web-dev-qa-db-fra.com

Différence entre UTC et GMT

Salut, j'ai quelques questions concernant les fuseaux horaires:

  1. Le temps peut-il être capturé uniquement en UTC?
  2. UTC -6 et GMT -6 sont-ils les mêmes, et cela signifie-t-il qu'il s'agit de l'heure locale américaine?
  3. Dis, j'ai l'heure UTC comme "02-01-2018 00:03", cela signifie-t-il que mon heure locale américaine est "01-01-2018 18:00"?

J'ai effectué des recherches sur Wikipedia et sur de nombreux sites Web connexes, mais je n'ai trouvé aucune explication pertinente

12
Anagha

Il n'y a pas de décalage horaire entre le temps universel coordonné et le temps moyen de Greenwich à 7h17 vendredi, le temps universel coordonné (UTC) est à 7h17 vendredi, le temps moyen de Greenwich (GMT)

Différence clé: UTC et GMT sont des normes de temps qui diffèrent en termes de dérivation et d'utilisation.

Pour citer timeanddate.com :

La différence entre GMT et UTC:

Le temps moyen de Greenwich (GMT) est souvent échangé ou confondu avec le temps universel coordonné (UTC). Mais GMT est un fuseau horaire et UTC est une norme horaire.

Bien que GMT et UTC partagent la même heure actuelle dans la pratique, il existe une différence fondamentale entre les deux:

  • GMT est un fuseau horaire officiellement utilisé dans certains pays européens et africains. L'heure peut être affichée à la fois au format 24 heures (0 - 24) ou au format 12 heures (1 - 12 h/pm).
  • L'UTC n'est pas un fuseau horaire, mais une norme horaire qui est la base de l'heure civile et des fuseaux horaires dans le monde entier. Cela signifie qu'aucun pays ou territoire n'utilise officiellement UTC comme heure locale.
12

Astronomie contre horloge atomique

La différence est que GMT (également officiellement connu sous le nom de niversal Time (UT) , ce qui peut prêter à confusion) est basé sur des observations astronomiques tandis que l'UTC est basé sur des horloges atomiques.

GMT signifie Greenwich Mean Time , le temps solaire moyen au Royal Observatory à Greenwich sur la rive sud de l'Est de Londres, ROYAUME-UNI. Lorsque le Soleil est à son point le plus haut exactement au-dessus de Greenwich, il est 12 heures GMT. Sauf: la Terre tourne légèrement de manière inégale, donc 12 heures est définie comme la moyenne annuelle, la moyenne du moment où le Soleil est au plus haut, son point culminant. Dans GMT, il ne peut jamais y avoir de seconde intercalaire car la rotation de la Terre ne saute pas.

UTC , qui signifie temps universel coordonné en anglais, est défini par horloges atomiques , mais est par ailleurs le même. En UTC, une seconde a toujours la même longueur. secondes intercalaires sont insérés dans UTC pour empêcher UTC et GMT de s'éloigner. En revanche, en GMT, les secondes sont étirées si nécessaire, donc en principe elles n'ont pas toujours la même longueur.

Pendant environ 100 ans, GMT a été utilisé comme base pour définir le temps dans le monde. Étant donné que le monde de nos jours base principalement la définition précise du temps sur des horloges atomiques, il est devenu habituel de baser la définition du temps sur UTC.

Pour vos questions:

  1. Oui, le temps peut être capturé uniquement en UTC. Le stockage de l'heure en UTC et l'utilisation de l'UTC pour la transmission d'informations date-heure sont généralement considérés comme une bonne pratique.
  2. Je suppose que c'est à chaque État des États-Unis de définir son heure. Et je ne sais pas, mais je suppose qu’aujourd’hui (officiellement ou dans la pratique), ils définissent le temps comme un décalage par rapport à l’UTC plutôt qu’au GMT. La différence entre les deux sera toujours inférieure à une seconde, donc pour de nombreuses raisons, vous n'aurez pas besoin de vous en soucier. L'heure standard centrale (par exemple America/Chicago) est à un décalage de -6, tout comme l'heure avancée des Rocheuses (par exemple America/Denver). D'un autre côté, le décalage -6 n'implique pas nécessairement une heure aux États-Unis. Certaines parties du Canada et du Mexique l'utilisent aussi, bien sûr, ainsi que les Galapagos et l'île de Pâques.
  3. Je ne pense pas que vous ayez exactement votre heure d'exemple, mais oui, le 2 janvier 2018 à 00h00 UTC est le même moment que le 1er janvier 2018 à 18h00 à Chicago et d'autres endroits qui sont à UTC-6 à l'hiver (l'hiver sur l'hémisphère Nord, c'est-à-dire).

Pour en savoir plus: Systèmes de temps .

15
Ole V.V.

❌ La réponse acceptée n'est ni correcte ni utile.

✅ En revanche, la réponse d'Ole V.V. résume correctement les différences techniques - pour plus de détails, suivez les liens vers les pages détaillées de Wikipédia.

Pour les programmeurs qui créent des applications commerciales, le résultat est que UTC est le nouveau GMT . Vous pouvez utiliser les termes de manière interchangeable, la différence étant littéralement inférieure à une seconde. Donc, à toutes fins pratiques dans la plupart des applications, aucune différence du tout.

Voici quelques conseils plus pratiques, avec des exemples de code.

Cordes

Dis, j'ai l'heure UTC comme "02-01-2018 00:03" cela signifie-t-il que mon heure locale américaine est "01-01-2018 18:00"?

Cette première partie est un mauvais exemple, avec la chaîne date-heure sans indicateur de son décalage ou de sa zone.

Si une chaîne indique un moment spécifique, elle doit indiquer un fuseau horaire ( Continent/Region nom formaté) et/ou un décalage -de-UTC en nombre d'heures-minutes-secondes. Si la chaîne est censée représenter un moment à UTC lui-même, cela signifie un décalage par rapport à UTC de zéro.

Pour écrire cette chaîne avec un décalage, diverses conventions peuvent être appliquées. La meilleure pratique consiste à indiquer à la fois les heures et les minutes avec deux points, tels que +00:00, +05:30 Ou -08:00. Le zéro en tête et les deux-points sont tous deux facultatifs, mais j'ai vu des bibliothèques se briser en rencontrant une valeur telle que -0800 Ou -8.

Zoulou

Comme raccourci pour un décalage de zéro, la lettre Z est couramment utilisée pour désigner l'UTC elle-même. Prononcé Zulu.

ISO 8601

De plus, la meilleure pratique de formatage textuel de la date et de l'heure pour l'informatique est pour nous les formats standard ISO 8601 . Pour une date-heure, le format AAAA-MM-JJTHH: MM: SS ± HH: MM: SS est utilisé. T sépare la partie date de la partie heure. Ce format présente des avantages tels qu'il est largement sans ambiguïté, facile à analyser par la machine, facile à lire par les humains à travers les cultures. Un autre avantage du tri alphabétique est également chronologique. La norme accepte également l'abréviation Z.

Ainsi, votre exemple UTC time as "02-01-2018 00:03" Est mieux indiqué comme 2018-01-02T00:03Z.

Java.time

Sachez que la plupart des langages de programmation, des bibliothèques et des bases de données ont un support très faible pour la gestion de la date et de l'heure, généralement basé sur une mauvaise compréhension des problèmes de date et d'heure. La gestion de la date et de l'heure est étonnamment compliquée et difficile à maîtriser.

La seule bibliothèque décente que j'ai rencontrée est les classes Java.time (voir Tutoriel ) fournies avec Java 8 et versions ultérieures, et son prédécesseur, le projet Joda-Time (également porté librement de Java vers .Net dans le Projet Noda Time ).

Dans Java.time, un moment est représenté de trois manières. Tous ont une résolution de nanosecondes .

  • Instant
    Toujours en UTC. Techniquement, un décompte de nanosecondes depuis la référence Epoch du premier moment de 1970 (1970-01-01T00: 00: 00Z).
  • OffsetDateTime
    Une date avec une heure dans le contexte d'un certain nombre d'heures-minutes-secondes avant ou derrière UTC.
  • ZonedDateTime
    Une date avec une heure dans le contexte d'un certain fuseau horaire.

Quelle est donc la différence entre un fuseau horaire et un décalage par rapport à UTC ? Pourquoi avons-nous besoin de classes séparées? Un décalage par rapport à l'UTC est simplement un nombre d'heures-minutes-secondes, trois nombres, ni plus, ni moins. Un fuseau horaire dans much more. Un fuseau horaire est une histoire des changements passés, présents et futurs du décalage utilisé par les habitants d'une région particulière.

Quels changements? Des changements dictés par les caprices ou la sagesse de leurs politiciens. Les politiciens du monde entier ont montré une prédilection pour changer le décalage utilisé par le ou les fuseaux horaires dans leur juridiction. L'heure d'été (DST) est un modèle courant de changements, son calendrier étant souvent modifié et la décision de passer à l'heure d'été ou de revenir à l'heure d'été a parfois changé. D'autres changements se produisent également, comme ces dernières années la Corée du Nord a changé son horloge d'une demi-heure pour se synchroniser avec la Corée du Sud, le Venezuela a tourné reculer leur horloge d'une demi-heure seulement pour revenir en arrière moins d'une décennie plus tard, la Turquie cette année a annulé le changement programmé de l'heure d'été à l'heure normale avec peu d'avertissement et contemporain La Russie a effectué plusieurs de ces changements ces dernières années.

Revenons à votre exemple dans votre point # 3, regardons un peu de code.

Dis, j'ai l'heure UTC comme "02-01-2018 00:03" cela signifie-t-il que mon heure locale américaine est "01-01-2018 18:00"?

Vos exemples de chaînes ont un autre problème. Cette minute 03 Dans la première partie est ignorée votre deuxième partie, une faute de frappe apparente. Je le sais parce qu'il n'y a pas d'ajustement de fuseau horaire en vigueur dans les Amériques à cette date impliquant une fraction d'heure de 57 minutes.

Pas un instant

Tout d'abord, nous analysons votre chaîne d'entrée. En l'absence d'indicateur de zone ou de décalage, nous devons analyser en utilisant LocalDateTime. Le nom LocalDateTime peut être trompeur, car il signifie une localité spécifique. Cela signifie une ou toutes les localités. Pour plus d'explications, voir Quelle est la différence entre Instant et LocalDateTime? .

String input = "2018-01-02T00:03" ;                  // Text of a date with time-of-day but without any context of time zore or offset-from-UTC. *Not* a moment, *not* a point on the timeline.
LocalDateTime ldt = LocalDateTime.parse( input ) ;   // Parsing the input as a `LocalDateTime`, a class representing a date with time but no zone/offset. Again, this does *not* represent a moment, is *not* a point on the timeline. 

UTC

D'après les faits donnés dans la question, nous savons que cette date et cette heure étaient censées représenter un moment en UTC. Nous pouvons donc attribuer le contexte d'un décalage par rapport à UTC de zéro heure-minute-seconde pour UTC lui-même. Nous appliquons une constante ZoneOffsetUTC pour obtenir un objet OffsetDateTime.

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );    // We are certain this text was intended to represent a moment in UTC. So correct the faulty text input by assigning the context of an offset of zero, for UTC itself.

Fuseau horaire

La Question demande de voir ce moment à travers une horloge murale de six heures derrière l'UTC utilisée aux États-Unis. Un fuseau horaire avec un tel décalage est America/Chicago.

Spécifiez un nom de fuseau horaire correct au format continent/region, Tel que America/Montreal, Africa/Casablanca Ou Pacific/Auckland . N'utilisez jamais les abréviations de 2 à 4 lettres telles que CST, EST ou IST telles qu'elles sont not ​​vrais fuseaux horaires, non standardisés, et pas même unique (!).

ZoneId z = ZoneId.of( "America/Chicago" ) ; // Adjust from UTC to a time zone where the wall-clock time is six hours behind UTC.
ZonedDateTime zdt = odt.atZoneSameInstant( z ) ;

Voir ce code exécuté en direct sur IdeOne.com .

odt.toString (): 2018-01-02T00: 03Z

zdt.toString (): 2018-01-01T18: 03-06: 00 [Amérique/Chicago]

Même moment, heure d'horloge murale différente

Ces odt et zdt représentent tous les deux le même moment simultané, le même point sur la timeline. La seule différence est l'heure de l'horloge murale.

Prenons un exemple, en utilisant l'Islande où leur fuseau horaire utilise un décalage par rapport à UTC de zéro heure-minute-seconde. La zone Atlantic/Reykjavik A donc une horloge murale identique à UTC. Au moins actuellement, l'heure de leur horloge murale correspond à l'heure UTC; dans le passé ou dans le futur, cela peut être différent, c'est pourquoi il est incorrect de dire "UTC is le fuseau horaire de l'Islande". Quoi qu'il en soit, notre exemple… dit que quelqu'un à Reykjavík, Islande avec 3 minutes après minuit sur l'horloge accrochée au mur fait un appel téléphonique à quelqu'un aux États-Unis. Cette personne américaine vit dans un endroit utilisant le fuseau horaire de la région de Chicago. Alors que la personne appelée décroche, elle regarde l'horloge accrochée au mur pour voir qu'il est peu après 6 heures PM (18:03). Même moment, heure d'horloge murale différente.

De plus, les calendriers accrochés à leurs murs sont différents, car c'est "demain" en Islande mais "hier" dans le continent américain. Même moment, dates différentes!


Table of date-time types in Java, both modern and legacy.


À propos Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes remplacent les anciennes classes de date-heure héritées gênantes telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time , désormais en mode de maintenance , conseille la migration vers le Java.time classes.

Pour en savoir plus, consultez le Tutoriel Oracle . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes Java.sql.*.

Où obtenir les classes Java.time?

Table of which Java.time library to use with which version of Java or Android

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d'essai pour de futurs ajouts possibles à Java.time. Vous pouvez trouver ici des classes utiles telles que Interval , YearWeek , YearQuarter et plus .

14
Basil Bourque