
Unix-Zeit [ a ] ist eine in der Informatik weit verbreitete Datums- und Zeitdarstellung . Sie misst die Zeit in Sekundenbruchteilen ( ohne Schaltsekunden) , die seit 00:00:00 UTC am 1. Januar 1970, dem Unix- Epochenbeginn , vergangen sind . Beispielsweise betrug die Unix-Zeit am 1. Januar 2010 um Mitternacht 1262304000.
Die Unix-Zeit entstand als Systemzeit der Unix -Betriebssysteme. Sie findet mittlerweile weite Verbreitung in anderen Computerbetriebssystemen , Dateisystemen , Programmiersprachen und Datenbanken . In der modernen Datenverarbeitung werden Werte mitunter feiner granular gespeichert , beispielsweise in Mikrosekunden oder Nanosekunden .
Definition
Die Unix-Zeit ist derzeit definiert als die Anzahl der Nicht-Schaltsekunden, die seit 00:00:00 UTC am Donnerstag, dem 1. Januar 1970, vergangen sind , der als Unix- Epoche bezeichnet wird . [ 3 ] Die Unix-Zeit wird typischerweise als vorzeichenbehaftete Ganzzahl kodiert .
Die Unix-Zeit0 Uhr UTC am 1. Januar 1970 entspricht genau Mitternacht UTC. Die Unix-Zeit wird danach für jede Sekunde außer Schaltsekunden um 1 erhöht. Beispielsweise wird 00:00:00 UTC am 1. Januar 1971 in Unix-Zeit wie folgt dargestellt:31.536.000 . Negative Werte geben auf Systemen , die diese unterstützen, Zeitpunkte vor der Unix-Epoche an, wobei der Wert für jede Sekunde vor der Epoche (ohne Schaltsekunde ) um 1 verringert wird. Beispielsweise wird 00:00:00 UTC am 1. Januar 1969 in Unix-Zeit wie folgt dargestellt:−31 536 000 .
Die Unix-Zeit wird manchmal auch als Epochenzeit bezeichnet . Dies kann irreführend sein, da die Unix-Zeit nicht das einzige auf einer Epoche basierende Zeitsystem ist und die Unix-Epoche nicht die einzige Epoche ist, die von anderen Zeitsystemen verwendet wird. [ 5 ]
Schaltsekunden
Die Unix-Zeit unterscheidet sich sowohl von der Koordinierten Weltzeit (UTC) als auch von der Internationalen Atomzeit (TAI) in der Behandlung von Schaltsekunden . UTC beinhaltet Schaltsekunden, die die Diskrepanz zwischen der präzisen Zeit, gemessen durch Atomuhren , und der Sonnenzeit , die sich auf die Position der Erde relativ zur Sonne bezieht, ausgleichen. Die Internationale Atomzeit (TAI) hingegen, in der jeder Tag präzise …86.400 Sekunden lang, ignoriert die Sonnenzeit und verliert allmählich die Synchronisation mit der Erdrotation, da sich die Erdrotation um etwa 1,5 m/s pro Tag und Jahrhundert verlangsamt . In Unix-Zeit enthält jeder Tag genau86.400 Sekunden . Jede Schaltsekunde verwendet den Zeitstempel der unmittelbar vorhergehenden oder nachfolgenden Sekunde. [ 3 ]
An einem normalen UTC-Tag, der eine Dauer von86 400 Sekunden, die Unix-Zeitangabe ändert sich kontinuierlich über Mitternacht hinweg. Zum Beispiel verläuft die Zeitdarstellung am Ende des oben genannten Tages wie folgt:
| TAI (17. September 2004) | UTC (16. bis 17. September 2004) | Unix-Zeit |
|---|---|---|
| 2004-09-17T00:00:30.75 | 2004-09-16T23:59:58.75 | 1 095 379 198 .75 |
| 2004-09-17T00:00:31.00 | 2004-09-16T23:59:59.00 | 1 095 379 199 .00 |
| 2004-09-17T00:00:31.25 | 2004-09-16T23:59:59.25 | 1 095 379 199 .25 |
| 2004-09-17T00:00:31.50 | 2004-09-16T23:59:59.50 | 1 095 379 199 .50 |
| 2004-09-17T00:00:31.75 | 2004-09-16T23:59:59.75 | 1 095 379 199 .75 |
| 2004-09-17T00:00:32.00 | 2004-09-17T00:00:00.00 | 1 095 379 200 .00 |
| 2004-09-17T00:00:32.25 | 2004-09-17T00:00:00.25 | 1 095 379 200 .25 |
| 2004-09-17T00:00:32.50 | 2004-09-17T00:00:00.50 | 1 095 379 200 .50 |
| 2004-09-17T00:00:32.75 | 2004-09-17T00:00:00.75 | 1 095 379 200 .75 |
| 2004-09-17T00:00:33.00 | 2004-09-17T00:00:01.00 | 1 095 379 201 .00 |
| 2004-09-17T00:00:33.25 | 2004-09-17T00:00:01.25 | 1 095 379 201 .25 |
Wenn eine Schaltsekunde auftritt, ist der UTC-Tag nicht genau86 400 Sekunden lang und die Unix-Zeitzahl (die sich immer um genauBei Schaltsekunden (86.400 pro Tag) tritt eine Diskontinuität auf . Schaltsekunden können positiv oder negativ sein. Bisher wurde noch keine negative Schaltsekunde eingeführt, aber falls dies geschehen sollte, würde die Unix-Zeit am Ende eines Tages mit einer negativen Schaltsekunde um 1 auf den Beginn des nächsten Tages springen. Während einer positiven Schaltsekunde am Ende eines Tages, die durchschnittlich etwa alle anderthalb Jahre vorkommt, steigt die Unix-Zeit während der Schaltsekunde kontinuierlich bis zum nächsten Tag an und springt dann am Ende der Schaltsekunde um 1 zurück (auf den Beginn des nächsten Tages). Beispielsweise geschah dies Ende 1998 auf streng POSIX.1- konformen Systemen:
| TAI (1. Januar 1999) | UTC (31. Dezember 1998 bis 1. Januar 1999) | Unix-Zeit |
|---|---|---|
| 1999-01-01T00:00:29.75 | 1998-12-31T23:59:58.75 | 915 148 798 .75 |
| 1999-01-01T00:00:30.00 | 1998-12-31T23:59:59.00 | 915 148 799 .00 |
| 1999-01-01T00:00:30.25 | 1998-12-31T23:59:59.25 | 915 148 799 .25 |
| 1999-01-01T00:00:30.50 | 1998-12-31T23:59:59.50 | 915 148 799 .50 |
| 1999-01-01T00:00:30.75 | 1998-12-31T23:59:59.75 | 915 148 799 .75 |
| 1999-01-01T00:00:31.00 | 1998-12-31T23:59:60.00 | 915 148 800 .00 |
| 1999-01-01T00:00:31.25 | 1998-12-31T23:59:60.25 | 915 148 800 .25 |
| 1999-01-01T00:00:31.50 | 1998-12-31T23:59:60.50 | 915 148 800 .50 |
| 1999-01-01T00:00:31.75 | 1998-12-31T23:59:60.75 | 915 148 800 .75 |
| 1999-01-01T00:00:32.00 | 1999-01-01T00:00:00.00 | 915 148 800 .00 |
| 1999-01-01T00:00:32.25 | 1999-01-01T00:00:00.25 | 915 148 800 .25 |
| 1999-01-01T00:00:32.50 | 1999-01-01T00:00:00.50 | 915 148 800 .50 |
| 1999-01-01T00:00:32.75 | 1999-01-01T00:00:00.75 | 915 148 800 .75 |
| 1999-01-01T00:00:33.00 | 1999-01-01T00:00:01.00 | 915 148 801 .00 |
| 1999-01-01T00:00:33.25 | 1999-01-01T00:00:01.25 | 915 148 801 .25 |
Unix-Zeitzahlen werden in der Sekunde unmittelbar nach einer positiven Schaltsekunde wiederholt. Die Unix-ZeitzahlDie Zahl 1 483 228 800 ist daher mehrdeutig: Sie kann entweder den Beginn der Schaltsekunde (2016-12-31 23:59:60) oder deren Ende eine Sekunde später (2017-01-01 00:00:00) bezeichnen. Im theoretischen Fall einer negativen Schaltsekunde entsteht keine Mehrdeutigkeit, sondern es gibt einen Bereich von Unix-Zeitzahlen, die sich überhaupt nicht auf einen Zeitpunkt in der UTC-Zeit beziehen.
Eine Unix-Uhr verwendet häufig eine andere Art der Schaltsekundenbehandlung, die mit dem Network Time Protocol (NTP) verbunden ist. Dies führt zu einem System, das nicht dem POSIX-Standard entspricht. Weitere Informationen finden Sie im Abschnitt zu NTP weiter unten.
Bei Zeiträumen ohne UTC-Schaltsekunde entspricht die Differenz zweier Unix-Zeitwerte der Dauer des Zeitraums in Sekunden zwischen den entsprechenden Zeitpunkten. Dies ist eine gängige Berechnungsmethode. Bei Schaltsekunden führt diese Methode jedoch zu falschen Ergebnissen. In Anwendungen, die diese Genauigkeit erfordern, muss daher bei der Arbeit mit Unix-Zeiten eine Schaltsekundentabelle herangezogen werden. Oft ist es ratsam, eine andere Zeitkodierung zu verwenden, die dieses Problem nicht aufweist.
Eine Unix-Zeitangabe lässt sich leicht wieder in eine UTC-Zeitangabe umwandeln, indem man den Quotienten und den Modulo der Unix-Zeitangabe bildet.86 400. Der Quotient entspricht der Anzahl der Tage seit der Epoche, der Modulo der Anzahl der Sekunden seit Mitternacht UTC an diesem Tag. Bei einer Unix-Zeitangabe, die aufgrund einer positiven Schaltsekunde mehrdeutig ist, interpretiert der Algorithmus sie als die Zeit unmittelbar nach Mitternacht. Er generiert niemals eine Zeitangabe, die in eine Schaltsekunde fällt. Bei einer Unix-Zeitangabe, die aufgrund einer negativen Schaltsekunde ungültig ist, generiert er eine ebenso ungültige UTC-Zeit. Falls diese Bedingungen relevant sind, muss eine Tabelle der Schaltsekunden herangezogen werden, um sie zu erkennen.
nicht-synchrone Variante basierend auf dem Network Time Protocol
Üblicherweise wird eine Unix-Uhr im Mills -Stil so implementiert, dass die Schaltsekundenbehandlung nicht synchron mit der Änderung der Unix-Zeitnummer erfolgt. Die Zeitnummer wird zunächst an der Stelle, an der ein Sprung erfolgen sollte, verringert und springt dann eine Sekunde nach dem Sprung auf die korrekte Zeit. Dies vereinfacht die Implementierung und ist in Mills' Arbeit [ 6 ] beschrieben. Folgendes geschieht während einer positiven Schaltsekunde:
| TAI (1. Januar 1999) | UTC (31. Dezember 1998 bis 1. Januar 1999) | Zustand | Unix-Uhr |
|---|---|---|---|
| 1999-01-01T00:00:29.75 | 1998-12-31T23:59:58.75 | TIME_INS | 915 148 798 .75 |
| 1999-01-01T00:00:30.00 | 1998-12-31T23:59:59.00 | TIME_INS | 915 148 799 .00 |
| 1999-01-01T00:00:30.25 | 1998-12-31T23:59:59.25 | TIME_INS | 915 148 799 .25 |
| 1999-01-01T00:00:30.50 | 1998-12-31T23:59:59.50 | TIME_INS | 915 148 799 .50 |
| 1999-01-01T00:00:30.75 | 1998-12-31T23:59:59.75 | TIME_INS | 915 148 799 .75 |
| 1999-01-01T00:00:31.00 | 1998-12-31T23:59:60.00 | TIME_INS | 915 148 800 .00 |
| 1999-01-01T00:00:31.25 | 1998-12-31T23:59:60.25 | TIME_OOP | 915 148 799 .25 |
| 1999-01-01T00:00:31.50 | 1998-12-31T23:59:60.50 | TIME_OOP | 915 148 799 .50 |
| 1999-01-01T00:00:31.75 | 1998-12-31T23:59:60.75 | TIME_OOP | 915 148 799 .75 |
| 1999-01-01T00:00:32.00 | 1999-01-01T00:00:00.00 | TIME_OOP | 915 148 800 .00 |
| 1999-01-01T00:00:32.25 | 1999-01-01T00:00:00.25 | ZEIT_WARTEN | 915 148 800 .25 |
| 1999-01-01T00:00:32.50 | 1999-01-01T00:00:00.50 | ZEIT_WARTEN | 915 148 800 .50 |
| 1999-01-01T00:00:32.75 | 1999-01-01T00:00:00.75 | ZEIT_WARTEN | 915 148 800 .75 |
| 1999-01-01T00:00:33.00 | 1999-01-01T00:00:01.00 | ZEIT_WARTEN | 915 148 801 .00 |
| 1999-01-01T00:00:33.25 | 1999-01-01T00:00:01.25 | ZEIT_WARTEN | 915 148 801 .25 |
Dies lässt sich korrekt entschlüsseln, indem man die Zustandsvariable für die Schaltsekunde beachtet, die eindeutig anzeigt, ob der Sprung bereits ausgeführt wurde. Die Änderung der Zustandsvariable erfolgt synchron mit dem Sprung.
Eine ähnliche Situation entsteht bei einer negativen Schaltsekunde, bei der die übersprungene Sekunde etwas zu spät kommt. Kurzzeitig zeigt das System eine scheinbar unmögliche Zeitangabe an, dies kann jedoch durch den Zustand TIME_DEL erkannt und korrigiert werden.
In diesem Systemtyp verstößt die Unix-Zeitangabe gegen POSIX im Zusammenhang mit beiden Arten von Schaltsekunden. Durch das Erfassen der Schaltsekunden-Zustandsvariablen zusammen mit der Zeitangabe ist eine eindeutige Dekodierung möglich. So kann bei Bedarf die korrekte POSIX-Zeitangabe generiert oder die vollständige UTC-Zeit in einem geeigneteren Format gespeichert werden.
Die für diese Art von Unix-Uhr erforderliche Dekodierungslogik würde auch eine hypothetische, POSIX-konforme Uhr mit derselben Schnittstelle korrekt dekodieren. Dies würde erreicht, indem während der gesamten Dauer einer eingefügten Schaltsekunde der Zustand TIME_INS und anschließend während der gesamten folgenden Sekunde der Zustand TIME_WAIT signalisiert wird, während der Sekundenzähler wiederholt wird. Dies erfordert eine synchrone Schaltsekundenbehandlung. Dies ist wahrscheinlich die beste Methode, UTC-Zeit in Unix-Uhrform über eine Unix-Schnittstelle darzustellen, sofern die zugrunde liegende Uhr grundsätzlich unempfindlich gegenüber Schaltsekunden ist.
Variante, die Schaltsekunden zählt
Eine weitere, deutlich seltenere, nicht konforme Variante der Unix-Zeiterfassung besteht darin, den Wert für jede Sekunde, einschließlich Schaltsekunden, zu erhöhen; [ 7 ] einige Linux-Systeme sind so konfiguriert. [ 8 ] Die so erfasste Zeit wird manchmal als „TAI“ bezeichnet (obwohl Zeitstempel in UTC umgerechnet werden können, wenn der Wert einem Zeitpunkt entspricht, an dem die Differenz zwischen TAI und UTC bekannt ist), im Gegensatz zu „UTC“ (obwohl nicht alle UTC-Zeitwerte in Systemen, die keine Schaltsekunden zählen, eine eindeutige Referenz haben). [ 8 ]
Da TAI keine Schaltsekunden kennt und jeder TAI-Tag exakt 86400 Sekunden lang ist, entspricht diese Kodierung einer rein linearen Zählung der seit dem 1. Januar 1970, 00:00:10 Uhr TAI, verstrichenen Sekunden. Dies vereinfacht die Zeitintervallberechnung erheblich. Zeitwerte dieser Systeme weisen nicht die Mehrdeutigkeit auf, die bei streng POSIX-konformen oder NTP-basierten Systemen auftritt.
In these systems it is necessary to consult a table of leap seconds to correctly convert between UTC and the pseudo-Unix-time representation. This resembles the manner in which time zone tables must be consulted to convert to and from civil time; the IANA time zone database includes leap second information, and the sample code available from the same source uses that information to convert between TAI-based timestamps and local time. Conversion also runs into definitional problems prior to the 1972 commencement of the current form of UTC (see section UTC basis below).
This system, despite its superficial resemblance, is not Unix time. It encodes times with values that differ by several seconds from the POSIX time values. A version of this system, in which the epoch was 1970-01-01T00:00:00 TAI rather than 1970-01-01T00:00:10 TAI, was proposed for inclusion in ISO C's time.h, but only the UTC part was accepted in 2011.[9] A tai_clock does, however, exist in C++20.
Representing the number
A Unix time number can be represented in any form capable of representing numbers. In some applications the number is simply represented textually as a string of decimal digits, raising only trivial additional problems. However, certain binary representations of Unix times are particularly significant.
The Unix time_t data type that represents a point in time is, on many platforms, a signed integer, traditionally of 32 bits (but see below), directly encoding the Unix time number as described in the preceding section. A signed 32-bit value covers about 68 years before and after the 1970-01-01 epoch. The minimum representable date is Friday 1901-12-13, and the maximum representable date is Tuesday 2038-01-19. One second after 2038-01-19T03:14:07Z this representation will overflow in what is known as the year 2038 problem.
UUIDv7 encodes the Unix epoch timestamp (in milliseconds) in an unsigned 48-bit field. This representation is valid until the year 10889.[10]
In some newer operating systems, time_t has been widened to 64 bits. This expands the times representable to 292277264695 (292.3 billion) years in both directions, which is over twenty times the present age of the universe.
Ursprünglich gab es Kontroversen darüber, ob Unix-Daten time_tvorzeichenbehaftet oder vorzeichenlos sein sollten. Wären sie vorzeichenlos, würde sich ihr Wertebereich in der Zukunft verdoppeln und der 32-Bit-Überlauf (um 68 Jahre) hinausgezögert. Allerdings wären dann Zeiträume vor der Epoche nicht mehr darstellbar. Es herrscht Einigkeit darüber, dass Daten time_tvorzeichenbehaftet sein sollten, und dies ist gängige Praxis. Die Softwareentwicklungsplattform für Version 6 des Betriebssystems QNXtime_t verwendet einen vorzeichenlosen 32-Bit- Datentyp, während ältere Versionen einen vorzeichenbehafteten Typ nutzten.
Die POSIX- und Open Group Unix-Spezifikationen umfassen die C-Standardbibliothek<time.h> , welche die in der Headerdatei definierten Zeittypen und -funktionen enthält . Der ISO-C-Standard legt fest, dass time_t`int` ein arithmetischer Datentyp sein muss, schreibt aber keinen bestimmten Typ oder keine bestimmte Kodierung vor. POSIX verlangt, time_tdass `int` ein Integer-Datentyp ist, schreibt aber nicht vor, ob er vorzeichenbehaftet oder vorzeichenlos sein muss.
Unix kennt keine Tradition, nicht-ganzzahlige Unix-Zeitwerte direkt als Binärbrüche darzustellen. Stattdessen werden Zeiten mit Subsekundengenauigkeit mithilfe von zusammengesetzten Datentypen repräsentiert , die aus zwei Ganzzahlen bestehen: der ersten time_t(dem ganzzahligen Anteil der Unix-Zeit) und der zweiten (dem Bruchteil der Zeitangabe in Millionstel (in struct timeval) oder Milliardstel (in struct timespec). [ 11 ] [ 12 ] Diese Strukturen bieten ein auf Dezimalzahlen basierendes Festkomma- Datenformat, das für manche Anwendungen nützlich und für andere trivial zu konvertieren ist.
UTC-Basis
Die heutige Form der UTC mit Schaltsekunden ist erst ab dem 1. Januar 1972 definiert. Davor, seit dem 1. Januar 1961, existierte eine ältere Form der UTC, bei der nicht nur gelegentlich Zeitsprünge in nicht-ganzzahligen Sekundenwerten vorgenommen wurden, sondern die UTC-Sekunde auch etwas länger als die SI-Sekunde war und sich periodisch an die Erdrotation anpasste. Vor 1961 gab es keine UTC und vor 1958 keine weitverbreitete Atomzeitmessung ; in diesen Zeiträumen wurde stattdessen eine Annäherung an die GMT (direkt basierend auf der Erdrotation) verwendet.
Die genaue Definition der Unix-Zeit als Kodierung von UTC ist nur dann unstrittig, wenn sie auf die heutige Form von UTC angewendet wird. Die Unix-Epoche vor dem Beginn dieser UTC-Form hat keinen Einfluss auf ihre Verwendung in der heutigen Zeit: Die Anzahl der Tage vom 1. Januar 1970 (Unix-Epoche) bis zum 1. Januar 1972 (Beginn von UTC) ist unstrittig, und nur diese Anzahl an Tagen ist für die Unix-Zeit relevant.
Die Bedeutung der Unix-Zeitwerte unten+63 072 000 (d. h. vor dem 1. Januar 1972) ist nicht präzise definiert. Die Grundlage solcher Unix-Zeiten ist am besten als eine ungenaue Annäherung an UTC zu verstehen. Computer jener Zeit hatten ohnehin selten Uhren, die präzise genug waren, um sinnvolle Zeitstempel im Subsekundenbereich zu liefern. Unix-Zeit ist daher nicht geeignet, um Zeiten vor 1972 in Anwendungen darzustellen, die Subsekundengenauigkeit erfordern; solche Anwendungen müssen zumindest definieren, welche Form von UTC oder GMT sie verwenden.
Seit 2009 wird die Möglichkeit erwogen, die Verwendung von Schaltsekunden in der bürgerlichen Zeit abzuschaffen. [ 13 ] Ein wahrscheinlicher Weg, dies umzusetzen, ist die Definition einer neuen Zeitskala, der sogenannten Internationalen Zeit (IT) , die zunächst mit UTC übereinstimmt, danach aber keine Schaltsekunden mehr enthält und somit einen konstanten Abstand zu TAI beibehält. Sollte dies geschehen, wird die Unix-Zeit voraussichtlich zukünftig auf Basis dieser neuen Zeitskala anstatt auf Basis von UTC definiert. Die Unsicherheit darüber, ob dies tatsächlich eintreten wird, macht die zukünftige Unix-Zeit nicht weniger vorhersehbar als sie es bereits ist: Würde UTC einfach keine Schaltsekunden mehr enthalten, bliebe das Ergebnis dasselbe.
Geschichte
Die frühesten Versionen der Unix-Zeit verwendeten eine 32-Bit-Ganzzahl, die mit 60 Hz inkrementiert wurde . Dies entsprach der Taktfrequenz des Systemtakts der frühen Unix-Systeme. So gespeicherte Zeitstempel konnten nur einen Zeitraum von etwas mehr als zweieinviertel Jahren abdecken. Um einen Überlauf zu verhindern, wurde der Bezugspunkt für die Zeitmessung mit den Unix-Releases geändert. Während der frühen Entwicklungsphase von Unix wurden sowohl Mitternacht am 1. Januar 1971 als auch am 1. Januar 1972 als Bezugspunkte verwendet. Frühe Definitionen der Unix-Zeit kannten zudem keine Zeitzonen. [ 14 ] [ 15 ]
Die aktuelle Epoche, der 1. Januar 1970, 00:00:00 UTC, wurde von Unix-Entwicklern willkürlich gewählt, da sie als praktisches Datum für die Arbeit angesehen wurde. Die Genauigkeit wurde auf Sekunden umgestellt, um kurzfristige Überläufe zu vermeiden. [ 1 ]
Bei der Ausarbeitung von POSIX.1time_t stellte sich die Frage nach einer präzisen Definition der Zeitmessung angesichts von Schaltsekunden. Das POSIX-Komitee erwog, ob die Unix-Zeit, wie ursprünglich vorgesehen, eine lineare Zählung der Sekunden seit der Epoche bleiben sollte, was die Umrechnung in die bürgerliche Zeit komplexer gestalten würde, oder ob eine Darstellung der bürgerlichen Zeit gewählt werden sollte, was Inkonsistenzen im Zusammenhang mit Schaltsekunden zur Folge hätte. Die Computeruhren jener Zeit waren nicht präzise genug eingestellt, um einen Präzedenzfall für die eine oder andere Methode zu schaffen.
Das POSIX-Komitee ließ sich von Argumenten gegen die Komplexität der Bibliotheksfunktionen überzeugen [ 16 ] und definierte die Unix-Zeit auf einfache Weise anhand der Elemente der UTC-Zeit. Diese Definition war so einfach, dass sie nicht einmal die Schaltjahrregel des Gregorianischen Kalenders vollständig berücksichtigte und das Jahr 2100 zu einem Schaltjahr gemacht hätte.
Die POSIX.1-Version von 2001 korrigierte die fehlerhafte Schaltjahrregelung in der Definition der Unix-Zeit, behielt aber die grundlegende Definition der Unix-Zeit als Kodierung der UTC anstelle einer linearen Zeitskala bei. Seit Mitte der 1990er-Jahre werden Computeruhren routinemäßig mit ausreichender Präzision eingestellt, sodass dies relevant ist, und zwar meist anhand der UTC-basierten Definition der Unix-Zeit. Dies hat zu erheblicher Komplexität in Unix-Implementierungen und im Network Time Protocol (NTP) geführt , da bei Schaltsekunden die entsprechenden Schritte in der Unix-Zeitnummer ausgeführt werden müssen.
Verwendung
Unix-Zeit ist in der Informatik weit über ihre ursprüngliche Anwendung als Systemzeit für Unix hinaus verbreitet . Sie ist in nahezu allen Systemprogrammierschnittstellen ( APIs) verfügbar , sowohl in denen von Unix-basierten als auch von Nicht-Unix- Betriebssystemen . Fast alle modernen Programmiersprachen bieten APIs für die Arbeit mit Unix-Zeit oder deren Konvertierung in andere Datenstrukturen. Unix-Zeit dient außerdem als Mechanismus zum Speichern von Zeitstempeln in verschiedenen Dateisystemen , Dateiformaten und Datenbanken .
Die C-Standardbibliothek verwendet Unix-Zeit für alle Datums- und Zeitfunktionen. Unix-Zeit wird manchmal auch als `time_t` bezeichnet, dem Namen des Datentyps, der in C und C++ für Zeitstempel verwendet wird . Die Unix-Zeitfunktionen von C sind in der POSIX- Spezifikation als Systemzeit-API definiert. [ 17 ] Die C-Standardbibliothek wird in allen modernen Desktop-Betriebssystemen, einschließlich Microsoft Windows und Unix-ähnlichen Systemen wie macOS und Linux , umfassend eingesetzt und dient dort als Standardprogrammierschnittstelle. [ 18 ] [ 19 ] [ 20 ]
iOS bietet eine Swift-API, die standardmäßig den 1. Januar 2001 als Unix-Zeitstempel verwendet, aber auch mit Unix-Zeitstempeln kompatibel ist. [ 21 ] Android verwendet für seine Systemzeit-API Unix-Zeit zusammen mit einer Zeitzone. [ 22 ]
Windows verwendet intern keine Unix-Zeit, sondern nur in System-APIs, die in C++ bereitgestellt werden und die Spezifikation der C-Standardbibliothek implementieren. [ 18 ] Im PE-Format für Windows-Executables wird Unix-Zeit verwendet. [ 23 ]
Unix-Zeit ist in den gängigen Programmiersprachen standardmäßig verfügbar und wird häufig in Desktop-, Mobil- und Webanwendungen eingesetzt. Java bietet ein `Instant`-Objekt, das einen Unix-Zeitstempel in Sekunden und Nanosekunden speichert. [ 24 ] Python stellt eine Zeitbibliothek bereit, die Unix-Zeit verwendet. [ 25 ] JavaScript bietet eine `Date`-Bibliothek, die Zeitstempel in Millisekunden seit der Unix-Epoche bereitstellt und speichert. Diese Bibliothek ist in allen modernen Desktop- und Mobilbrowsern sowie in JavaScript-Serverumgebungen wie Node.js implementiert . [ 26 ]
Free Pascal implementiert UNIX-Zeit mit den Funktionen GetTickCount (veraltet, vorzeichenlos 32 Bit) und GetTickCount64 (vorzeichenlos 64 Bit) mit einer Auflösung von 1 ms auf Unix-ähnlichen Plattformen.
Dateisysteme, die für Unix-basierte Betriebssysteme entwickelt wurden, verwenden in der Regel Unix-Zeit. APFS , das standardmäßig auf allen Apple-Geräten verwendete Dateisystem, und ext4 , das auf Linux- und Android-Geräten weit verbreitet ist, verwenden beide Unix-Zeit in Nanosekunden für Dateizeitstempel. [ 27 ] [ 28 ] Verschiedene Archivdateiformate , darunter RAR und tar , können Zeitstempel in Unix-Zeit speichern . [ 29 ] [ 30 ] Unix-Zeit wird auch häufig zur Speicherung von Zeitstempeln in Datenbanken verwendet, beispielsweise in MySQL und PostgreSQL . [ 31 ] [ 32 ]
Einschränkungen
Unix-Zeit wurde entwickelt, um Kalenderdaten und -zeiten kompakt für die interne Verwendung in Computern zu kodieren. Es ist nicht für die einfache Lesbarkeit durch Menschen oder die Speicherung zeitzonenabhängiger Werte gedacht. Standardmäßig ist es zudem auf die Zeitangabe in Sekunden beschränkt, wodurch es ungeeignet ist, wenn eine präzisere Zeitmessung erforderlich ist, beispielsweise zur Messung der Ausführungszeit von Programmen. [ 33 ]
Bereich der darstellbaren Zeiten

Unix-Zeit benötigt prinzipiell keine spezifische Speichergröße, jedoch verwenden die meisten gängigen Implementierungen vorzeichenbehaftete Ganzzahlen , deren Größe der Wortgröße der zugrundeliegenden Hardware entspricht. Da die meisten modernen Computer 32-Bit- oder 64-Bit-Systeme sind und viele Programme weiterhin im 32-Bit-Kompatibilitätsmodus geschrieben werden, nutzen viele Programme, die Unix-Zeit verwenden, vorzeichenbehaftete 32-Bit-Ganzzahlfelder. Der Maximalwert einer vorzeichenbehafteten 32-Bit-Ganzzahl ist 2 <sup>31</sup> − 1 , der Minimalwert −2<sup> 31</sup> . Dadurch ist es unmöglich, Daten vor dem 13. Dezember 1901 (20:45:52 UTC) oder nach dem 19. Januar 2038 (03:14:07 UTC) darzustellen. Diese frühe Abgrenzung kann Auswirkungen auf Datenbanken haben, die historische Informationen speichern. In einigen Datenbanken, die 32-Bit-Unix-Zeit für Zeitstempel verwenden, kann es erforderlich sein, die Zeit in einem anderen Feldformat, beispielsweise als Zeichenkette, zu speichern, um Daten vor 1901 darzustellen. Diese späte Abgrenzung ist als „ Jahr-2038-Problem“ bekannt und kann zu Problemen führen, wenn sich das Datum nähert, da Daten nach 2038 wieder auf den Beginn des darstellbaren Bereichs im Jahr 1901 zurückfallen würden. [ 33 ] : 60 [ 34 ]
Datumsbereichsgrenzen stellen bei 64-Bit-Darstellungen der Unix-Zeit kein Problem dar, da der effektive Zeitraum der mit in einer vorzeichenbehafteten 64-Bit-Ganzzahl gespeicherten Unix-Zeit darstellbaren Daten über 584 Milliarden Jahre beträgt, bzw. 292 Milliarden Jahre in beide Richtungen der Epoche 1970. [ 33 ] : 60-61 [ 35 ]
Alternativen
Unix-Zeit ist nicht der einzige Standard für die Zeitmessung, der von einem Unix-Epochenbeginn ausgeht. Die Struktur der Programmiersprache C# , der Datentyp in Windows und die Funktion von Azure Cosmos DB speichern die Zeit als Anzahl von 100-Nanosekunden-Intervallen, die seit 0:00 Uhr GMT am 1. Januar 1 n. Chr. [ 36 ] , 1. Januar 1601 [ 37 ] und 1. Januar 1970 [ 38 ] vergangen sind . Diese Werte werden erst in den Jahren 29228 [ 39 ] [ 40 ] , 30828 [ 39 ] [ 41 ] bzw. 31197 [ 42 ] überschritten . Die Windows-Epochenzeit wird zur Speicherung von Zeitstempeln für Dateien [ 43 ] und in Protokollen wie dem Active Directory Time Service [ 44 ] und Server Message Block verwendet . DateTimeFILETIMEGetCurrentTicksStatic
Das Network Time Protocol (NTP), das zur Zeitabstimmung zwischen Computern verwendet wird, nutzt den 1. Januar 1900 als Epoche. Die Sekunden werden in einer vorzeichenlosen 32-Bit-Ganzzahl und die Bruchteile von Sekunden in einer weiteren vorzeichenlosen 32-Bit-Ganzzahl gezählt. Der Zähler wird alle 2<sup> 32</sup> Sekunden (etwa einmal alle 136 Jahre) überschrieben. [ 45 ]
Viele Anwendungen und Programmiersprachen bieten Methoden zum Speichern von Zeitangaben mit expliziter Zeitzonenangabe. [ 46 ] Es existieren außerdem eine Reihe von Zeitformatstandards, die sowohl von Menschen als auch von Computern lesbar sind, wie beispielsweise ISO 8601 .
Bemerkenswerte Ereignisse in der Unix-Zeit
Unix-Enthusiasten veranstalten traditionell sogenannte „time_t-Partys“ (ausgesprochen „Time Tea Parties “), um besondere Werte der Unix-Zeit zu feiern. [ 47 ] [ 48 ] Diese Feierlichkeiten sind vergleichbar mit den Neujahrsfeiern , die in vielen Kalendern zum Jahreswechsel stattfinden. Mit der Verbreitung der Unix-Zeit hat sich auch der Brauch verbreitet, ihre Meilensteine zu feiern. Üblicherweise werden runde Dezimalzahlen gefeiert , entsprechend der Unix-Konvention, time_tWerte dezimal darzustellen. In manchen Gruppen werden aber auch runde Binärzahlen gefeiert, wie beispielsweise +2 30 , das am Samstag, dem 10. Januar 2004, um 13:37:04 UTC erreicht wurde.
Die Ereignisse, die hier gefeiert werden, werden typischerweise als „ N Sekunden seit der Unix-Epoche“ beschrieben, aber das ist ungenau; wie oben erläutert, ist aufgrund der Behandlung von Schaltsekunden in der Unix-Zeit die Anzahl der seit der Unix-Epoche verstrichenen Sekunden für Zeitpunkte nach der Epoche etwas größer als die Unix-Zeitangabe.
- Am Mittwoch, dem 17. Oktober 1973, um 18:36:57 UTC, erschien zum ersten Mal das Datum im ISO 8601- Format [ b ] (1973-10-17) innerhalb der Ziffern der Unix-Zeit (119731017).
- Am Sonntag, dem 9. September 2001 um 01:46:40 UTC, begann die Unix-Billennium-Ära (Unix-Zeitnummer).1.000.000.000 wurde gefeiert. [ 49 ] Der Name Billennium ist ein Kofferwort aus Billion und Millennium . [ 50 ] [ 51 ] Bei einigen Programmen, die Zeitstempel als Text speicherten , traten Sortierfehler auf. Wie bei einer Textsortierung wurden Zeiten nach dem Jahreswechsel, die mit einer 1 begannen , fälschlicherweise vor früheren Zeiten mit einer 9 beginnenden Zeit sortiert . Betroffen waren unter anderem der beliebte Usenet -Reader KNode und der E-Mail- Client KMail , der zur KDE- Desktopumgebung gehörte. Diese Fehler waren in der Regel kosmetischer Natur und wurden schnell behoben, sobald sie auftraten. Das Problem betraf auch viele Filtrix -Dokumentformatfilter, die mit den Linux- Versionen von WordPerfect ausgeliefert wurden. Da Corel diese Version des Programms nicht mehr verkaufte oder unterstützte, wurde ein Patch von der Benutzergemeinschaft entwickelt, um das Problem zu beheben . [ 52 ]
- Am Freitag, dem 13. Februar 2009, um 23:31:30 UTC, erreichte die Dezimaldarstellung der Unix-Zeit den Wert 100 .1.234.567.890 Sekunden . [ 53 ] Google feierte dies mit einem Google Doodle . [ 54 ] Weltweit fanden in verschiedenen technischen Subkulturen Partys und andere Feierlichkeiten statt, um dies zu feiern .1.234.567.890 . Sekunde . [ 47 ] [ 55 ]
In der Populärkultur
Vernor Vinges Roman „A Deepness in the Sky“ beschreibt eine raumfahrende Handelszivilisation, die Tausende von Jahren in der Zukunft lebt und noch immer die Unix-Ära nutzt. Der „ Programmierer-Archäologe “, der für das Auffinden und die Wartung von nutzbarem Code in ausgereiften Computersystemen zuständig ist, glaubt zunächst, dass sich die Epoche auf den Zeitpunkt der ersten Mondlandung bezieht , erkennt dann aber, dass es sich um „die Nullsekunde eines der ersten Computerbetriebssysteme der Menschheit“ handelt. [ 56 ]
Siehe auch
Anmerkungen
Referenzen
- ^ a b Farhad, Manjoo (8. September 2001). „Unix Tick Tocks to a Billion“ . Wired . ISSN 1059-1028 . Archiviert vom Original am 11. September 2022. Abgerufen am 16. Oktober 2022 .
- ^ „The Open Group Base Specifications Issue 7, Rationale: Base Definitions, section A.4 General Concepts“ . The Open Group . Archiviert vom Original am 15. November 2017. Abgerufen am 9. September 2019 .
- ^ a b c „The Open Group Base Specifications Issue 7, section 4.16 Seconds Since the Epoch“ . The Open Group . Archiviert vom Original am 22. Dezember 2017. Abgerufen am 22. Januar 2017 .
- ^ Matthew, Neil; Stones, Richard (2008). „Die Linux-Umgebung“. Einführung in die Linux-Programmierung . Indianapolis, Indiana, USA: Wiley. S. 148. ISBN 978-0-470-14762-7Die
- ^ „FILETIME-Struktur (minwinbase.h)“ . Microsoft Docs . 2. April 2021.
- ^ Mills, David L. (12. Mai 2012). „Die NTP-Zeitskala und Schaltsekunden“ . eecis.udel.edu . Archiviert vom Original am 15. Mai 2012. Abgerufen am 21. August 2017 .
- ^ „Präzise Zeiterfassung“ . Quellen für Zeitzonen- und Sommerzeitdaten . Archiviert vom Original am 16. Oktober 2017. Abgerufen am 30. Mai 2022.
Der tz-Code und die zugehörigen Daten unterstützen Schaltsekunden über eine optionale „right“-Konfiguration, bei der die interne Ganzzahluhr time_t des Computers jede TAI-Sekunde zählt, im Gegensatz zur standardmäßigen „posix“-Konfiguration, bei der die interne Uhr Schaltsekunden ignoriert
.Die beiden Konfigurationen stimmen für Zeitstempel ab 1972-01-01 00:00:00 UTC (time_t 63 072 000) überein und weichen für Zeitstempel ab, die mit time_t 78 796 800 beginnen. Dies entspricht der ersten Schaltsekunde 1972-06-30 23:59:60 UTC in der "richtigen" Konfiguration und dem 1972-07-01 00:00:00 UTC in der "posix" Konfiguration.
- ^ a b „Zeitskalen“ . Network Time Protocol Wiki . 24. Juli 2019. Archiviert vom Original am 12. Januar 2020. Abgerufen am 12. Januar 2020 .
- ^ Markus Kuhn. „Modernisierte API für ISO C“ . www.cl.cam.ac.uk. Archiviert vom Original am 26. September 2020. Abgerufen am 31. August 2020 .
- ^ RFC 9562
- ^ "timespec" . NetBSD-Handbuchseiten . 12. April 2011. Archiviert vom Original am 10. August 2019. Abgerufen am 5. Juli 2019 .
- ^ "time.h(0P)" . Linux-Handbuchseite . Archiviert vom Original am 27. Juni 2019. Abgerufen am 5. Juli 2019 .
- ^ McCarthy, D. D .; Seidelmann, P. K. (2009). TIME – Von der Erdrotation zur Atomphysik . Weinheim: Wiley–VCH Verlag GmbH & Co. KGaA. S. 232. ISBN 978-3-527-40780-4Die
- ^ Unix Programmer's Manual (PDF) (1. Auflage). 3. November 1971. Archiviert (PDF) vom Original am 5. März 2022. Abgerufen am 28. März 2012.
Die Funktion `time`
gibt die Zeit seit 00:00:00, 1. Januar 1971, gemessen in Sechzigstelsekunden, zurück.
- ^ Unix Programmer's Manual (PDF) (3. Aufl.). 15. März 1972. Archiviert (PDF) vom Original am 12. Februar 2023. Abgerufen am 11. Februar 2023.
Die Funktion `time`
gibt die Zeit seit 00:00:00, 1. Januar 1972, gemessen in Sechzigstelsekunden, zurück. Die Zeit wird in 32 Bit gespeichert. Dies garantiert alle 2,26 Jahre eine Krise.
- ^ „Posix ist überholt (2016) [pdf] | Hacker News“ . news.ycombinator.com . Archiviert vom Original am 18. März 2025. Abgerufen am 23. Juli 2025 .
- ^ „The Open Group Technical Standard Base Specifications Issue 7 (2018 edition)“ . IEEE und The Open Group. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ a b "time, _time32, _time64" . learn.microsoft.net . Microsoft Corporation. 13. Februar 2023. Archiviert vom Original am 1. Mai 2023 . Abgerufen am 1. Mai 2023 .
- ^ „Die GNU C-Bibliothek (glibc)“ . Das GNU-Betriebssystem . Free Software Foundation. Archiviert vom Original am 22. April 2016. Abgerufen am 1. Mai 2023.
Das GNU C-Bibliotheksprojekt stellt die Kernbibliotheken für das GNU-System und GNU/Linux-Systeme sowie für viele andere Systeme bereit, die Linux als Kernel verwenden
. - ^ „Mac OS X-Handbuchseite für localtime(3)“ . Apple-Dokumentationsarchiv . Apple Inc. Archiviert vom Original am 22. Juli 2022. Abgerufen am 1. Mai 2023 .
- ^ „NSDate“ . Apple Developer Documentation . Apple Inc. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ „Zeitübersicht“ . Android Open Source Project . Google LLC. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ „PE-Format – Win32-Apps“ . learn.microsoft.com . Microsoft Corporation. 24. März 2023. Archiviert vom Original am 29. April 2023. Abgerufen am 1. Mai 2023 .
- ^ „Instant (Java Platform SE 8)“ . docs.oracle.com . Oracle. Archiviert vom Original am 25. November 2016. Abgerufen am 1. Mai 2023 .
- ^ „Zeit – Zugriff auf und Umrechnung von Zeitwerten“ , Python-Dokumentation , archiviert vom Original am 22. Juli 2022 , abgerufen am 25. Juli 2022
- ^ „Datum – JavaScript | MDN“ . developer.mozilla.org . Mozilla. Archiviert vom Original am 21. Juli 2021. Abgerufen am 1. Mai 2023 .
- ^ Apple File System Reference (PDF) , S. 57, archiviert (PDF) vom Original am 5. November 2022 , abgerufen am 19. Oktober 2022.
Dieser Zeitstempel gibt die Anzahl der Nanosekunden seit dem 1. Januar 1970 um 0:00 UTC an, Schaltsekunden werden nicht berücksichtigt.
- ^ „Datenstrukturen und Algorithmen“ . Die Linux-Kernel-Dokumentation . Linux Kernel Organization, Inc. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ „RAR 5.0-Archivformat“ . www.rarlab.com . win.rar GmbH. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023.
Die Zeit wird im Unix-time_t-Format gespeichert, wenn dieses Flag gesetzt ist, andernfalls im Windows-FILETIME-Format
. - ^ „Tape Archive (tar) File Format Family“ . www.loc.gov . Library of Congress. 7. Januar 2021. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ „Datums- und Zeitfunktionen“ , MySQL 8.0 Referenzhandbuch , archiviert vom Original am 19. Oktober 2022 , abgerufen am 19. Oktober 2022
- ^ „8.5. Datums-/Zeittypen“ . PostgreSQL-Dokumentation . Die PostgreSQL Global Development Group. 9. Februar 2023. Archiviert vom Original am 1. Mai 2023. Abgerufen am 1. Mai 2023 .
- ^ a b c Rochkind, Mark (2004). Advanced UNIX Programming (2. Aufl.). Addison-Wesley. S. 56–63 . ISBN 978-0-13-141154-8Die
- ^ „Was ist das Jahr-2038-Problem?“ . HowStuffWorks . 1. April 2000 . Abgerufen am 23. Juli 2025 .
- ^ Saxena, Ashutosh; Rawat, Sanjay. „IDRBT Working Paper Nr. 9“ (PDF) . Archiviert vom Original (PDF) am 13. Mai 2012.
- ^ „DateTime Struct (System)“ . learn.microsoft.com . Abgerufen am 14. Januar 2025 .
- ^ „FILETIME (minwinbase.h) – Win32-Apps“ . Microsoft Learn . Microsoft. 2. April 2021. Archiviert vom Original am 10. März 2023. Abgerufen am 9. März 2023 .
- ^ „GetCurrentTicks – Azure Cosmos DB für NoSQL“ . learn.microsoft.com . Abgerufen am 31. August 2025 .
- ^ a b „Kritische und wichtige Daten“ . people.cs.nycu.edu.tw . Abgerufen am 12. Februar 2024 .
- ^ „Umgehung von Konten, die mit AAD Connect ablaufen: REDUX“ . www.undocumented-features.com .
- ^ Thulin, Anders (6. April 2013). „Interpretation of NTFS Timestamps“ . Forensic Focus . Abgerufen am 23. Juli 2019 .
- ^ "Datum" .
- ^ „Dateizeiten – Win32-Apps“ . Microsoft Learn . Microsoft. 7. Januar 2021. Archiviert vom Original am 8. März 2023. Abgerufen am 9. März 2023 .
- ^ „So konvertieren Sie Datums-/Zeitattribute in Active Directory in das Standardzeitformat“ . Microsoft Learn . Microsoft. Archiviert vom Original am 20. Oktober 2022. Abgerufen am 20. Oktober 2022 .
- ^ W. Richard Stevens; Bill Fenner; Andrew M. Rudoff (2004). UNIX-Netzwerkprogrammierung . Addison-Wesley Professional. S. 582–. ISBN 978-0-13-141155-5Archiviert vom Original am 30. März 2019. Abgerufen am 16. Oktober 2016 .
- ^ „datetime – Grundlegende Datums- und Zeittypen“ . Python-Standardbibliothek-Referenz . Python Software Foundation. Archiviert vom Original am 19. Oktober 2022. Abgerufen am 20. Oktober 2022.
Attribute: Jahr, Monat, Tag, Stunde, Minute, Sekunde, Mikrosekunde und Zeitzoneninformation.
- ^ a b Tweney, Dylan (12. Februar 2009). „Unix Lovers to Party Like It's 1234567890“ . Wired . Archiviert vom Original am 29. März 2014. Abgerufen am 12. März 2017 .
- ^ „Slashdot | Datum +%s Turning 1111111111“ . 17. März 2005. Archiviert vom Original am 12. Januar 2020. Abgerufen am 12. Januar 2020 .
- ^ „Unix-Zeitfakten & Wissenswertes – Unix Time . Info“ . Archiviert vom Original am 27. Oktober 2017.
- ^ „UNIX nähert sich dem reifen Alter von einer Milliarde Nutzern“ . Electromagnetic.net. Archiviert vom Original am 16. Juli 2023. Abgerufen am 6. Dezember 2012 .
- ^ Neumann, Peter G. (15. Oktober 2001). „The RISKS Digest, Band 21, Ausgabe 69“ . The Risks Digest . 21 (69). Archiviert vom Original am 22. Oktober 2015. Abgerufen am 6. Dezember 2012 .
- ^ „Technische Probleme“ . linuxmafia.com . Archiviert vom Original am 11. Oktober 2012. Abgerufen am 21. August 2017 .
- ^ nixCraft (9. Februar 2009). „Humor: Am Freitag, dem 13. Februar 2009, ist die Unix-Zeit 1234567890“ . Cyberciti.biz . Abgerufen am 5. Juli 2023 .
- ^ „Google 1234567890 Logo“ . Google Inc. Archiviert vom Original am 11. Januar 2013. Abgerufen am 28. Januar 2013 .
- ^ Ahmed, Murad (13. Februar 2009). „Beim dritten Taktschlag ist die Unix-Zeit 1234567890“ . The Times . Archiviert vom Original am 14. November 2016. Abgerufen am 12. Januar 2020 .
- ^ Mashey, John R. (27. Dezember 2004). „Sprachen, Niveaus, Bibliotheken und Langlebigkeit“ . ACM Queue . 2 (9): 32–38 . doi : 10.1145/1039511.1039532 . S2CID 28911378 .
Externe Links
- Unix-Programmierhandbuch, erste Auflage
- Persönlicher Bericht von Landon Curt Noll über die POSIX-Entscheidungen
- Chrono-kompatible Low-Level-Datumsalgorithmen – Algorithmen zur Umrechnung zwischen gregorianischen und julianischen Daten sowie zur Anzahl der Tage seit Beginn der Unix-Zeit.