web-dev-qa-db-fra.com

Une journée dure-t-elle toujours 86 400 secondes d'époque?

En examinant mes réponses passées, j'ai remarqué que j'avais proposé du code tel que this :

import time

def dates_between(start, end):
  # muck around between the 9k+ time representation systems in Python
  # now start and end are seconds since Epoch

  # return [start, start + 86400, start + 86400*2, ...]
  return range(start, end + 1, 86400)

En relisant ce morceau de code, je ne pouvais pas m'empêcher de sentir le contact effroyable de Tony le poney sur ma colonne vertébrale, murmurant doucement des "secondes intercalaires" à mes oreilles et d'autres choses terribles, terribles.

Quand est-ce que l'hypothèse "un jour dure 86 400 secondes", pour les définitions d'époque de "seconde", si jamais? (J'assume des fonctions telles que Python time.mktime renvoie déjà des valeurs ajustées à l'heure d'été, donc l'extrait ci-dessus devrait également fonctionner les jours de changement d'heure d'été ... j'espère?)

40
badp

Chaque fois que vous effectuez des calculs calendaires, il est presque toujours préférable d'utiliser l'API fournie par la plate-forme, comme les modules Python datetime et calendar , ou une bibliothèque mature de haute qualité, est d'écrire vous-même du code "plus simple". Les API de date et de calendrier sont laides et compliquées, mais c'est parce que les calendriers du monde réel ont beaucoup de comportements étranges.

Par exemple, s'il est "10 h 00" actuellement, le nombre de secondes à "10 h 00 demain" pourrait être différent, selon le ou les fuseaux horaires que vous utilisez, si l'heure d'été commence ou se termine ce soir, etc.

Chaque fois que la constante 86400 apparaît dans votre code, il y a de fortes chances que vous fassiez quelque chose qui ne va pas.

Et les choses deviennent encore plus compliquées lorsque vous devez déterminer le nombre de secondes dans une semaine, un mois, un an, un trimestre, etc. Apprenez à utiliser ces bibliothèques d'agendas.

22
Kristopher Johnson

Selon Wikipedia ,

Les jours UTC sont presque toujours longs de 86 400 s, mais en raison de "secondes intercalaires", ils sont parfois 86 401 s et pourraient être longs de 86 399 s (bien que cette dernière option n'ait jamais été utilisée en décembre 2010); cela permet de synchroniser les jours avec la rotation de la Terre (ou le temps universel).

Je m'attends à ce qu'une double seconde intercalaire puisse en fait allonger la journée des 86402, si jamais elle devait être utilisée.

MODIFIER à nouveau: le deuxième s'est deviné à cause de la confusion python. time.mktime renvoie toujours les secondes UTC Epoch. Le rouge. :)

12
Dave

Le nombre de secondes dans une journée dépend du système horaire que vous utilisez, par exemple dans POSIX, une journée est exactement 86400 secondes par définition :

Comme représenté en secondes depuis l'époque, chaque jour doit être comptabilisé avec exactement 86400 secondes.

En UTC, il pourrait y avoir une seconde intercalaire incluse, c'est-à-dire qu'un jour peut être 86401 secondes SI (et théoriquement 86399 secondes SI). Au 30 juin 2015, cela s'était produit 26 fois .

Si nous mesurons les jours par le mouvement apparent du Soleil, alors la durée d'un jour (solaire) varie dans l'année de ~ 16 minutes par rapport à la moyenne .

À son tour, il est différent de T1 qui est également basé sur la rotation de la Terre (temps solaire moyen). n jour solaire apparent peut être 20 secondes plus court ou 30 secondes plus long qu'un jour solaire moyen . L'UTC est maintenue à moins de 0,9 seconde d'UT1 par l'introduction de secondes intercalaires occasionnelles.

Si vous définissez un jour par horloge locale, cela peut être très chaotique en raison de changements bizarres de fuseau horaire politique. Il n'est pas correct de supposer qu'un jour ne peut changer que d'une heure en raison de l'heure d'été.

10
jfs

Dans tous les fuseaux horaires qui "prennent en charge" heure d'été , vous aurez deux jours par an sans 24h. Ils auront respectivement 25h ou 23h. Et ne pensez même pas à coder en dur ces dates. Ils changent chaque année et entre les fuseaux horaires.

Oh, et voici une liste de 4 autres raisons auxquelles vous n'aviez pas pensé et pourquoi vous ne devriez pas faire ce que vous faites .

6
Lukas Eder