L'epoch (de l'anglaisépoque ou ère) représente la date initiale à partir de laquelle est mesuré le temps par les systèmes d'exploitation. Certains logiciels utilisent une epoch différente de leur système d'exploitation, ce qui peut conduire à des bugs.
Principe
Cette date varie selon les systèmes d'exploitation ou les logiciels, par exemple :
Alors que le 0 janvier 1900 devrait être l'équivalent du 31 décembre 1899, ces systèmes n'autorisent pas cette date à cause d'un bug plaçant 1900 comme une année bissextile.
Le système GPS se base sur les semaines (une semaine commençant un dimanche, selon le format américain) et le 6 janvier 1980 est le premier dimanche de l'année 1980[25],[26].
2001 est l'année de publication de Mac OS X 10.0 (mais NSDate pour l'Enterprise Objects Framework (EOF) 1.0 d'Apple était développé in 1994).
Le temps est mesuré en nombre d'unités de temps depuis cette date. L'unité de temps la plus courante est la seconde. Il arrive que l'unité ne soit pas spécifiée et que l'on parle de tick, qui est la plus petite unité de temps gérée par le système d'exploitation.
Dépassement
Des problèmes sont susceptibles d'arriver lorsque la date dépasse la valeur maximale autorisée pour le type de donnée utilisée pour la stocker. Par exemple, sous UNIX, les dates sont exprimées en nombre de secondes depuis l'epoch et stockées dans des entiers. Quand ceux-ci sont stockés dans des entiers signés de 32 bits, des problèmes risquent donc de survenir à partir du 19 janvier 2038. Il existe le même problème sous Windows à partir de la date du 6 février 2036.
La plupart des ordinateurs peuvent actuellement stocker les entiers non signés sur 64 bits (et non plus 32 bits), donc chaque développeur (à condition de reprogrammer la mise à jour du principe de stockage de la date dans chaque logiciel) peut reculer la date du dépassement de l'epoch bien au-delà de 2038 : le nombre stockable maximum de ticks devient 2⁶⁴ = 18 446 744 073 709 551 616 unités de temps du système d'exploitation : la nouvelle date butoir se situe à l'an 292 277 026 596 apr. J.-C. (soit environ 21 fois l'âge de l'univers) : le problème sera ainsi résolu pour notre ère.
↑AmigaOS measures time in seconds and stores it in a signed 32 bit integer. After January 19, 2046, 03:14:07 the date will be negative. Latest OS version 4.1 (2016) has no fix for this.
↑Be aware that the Epoch function return the unix Epoch SELECT EXTRACT(EPOCH FROM TIMESTAMP WITH TIME ZONE '1970-01-01 00:00:00-00'); returns 0
↑Nachum Dershowitz et Edward Reingold, Calendrical Calculations, Cambridge University Press, , 3rd éd., 512 p. (ISBN978-0-521-70238-6), « The Gregorian calendar »
↑« PostgreSQL 9.1.24 Documentation. Chapter 8: Data Types. 8.5. Date/Time Types », sur PostgreSQL.org : « Note: When timestamp values are stored as eight-byte integers (currently the default), microsecond precision is available over the full range of values. […] timestamp values are stored as seconds before or after midnight 2000-01-01. »