Warum hat Unix ein eigenes Zeitkonzept? Was ist die Epoche und was ist das Y2038-Problem?
Die Unix-Zeit ist ein Mittel zur Darstellung eines bestimmten Datums und einer bestimmten Uhrzeit, die von Linux, macOS und vielen anderen interoperablen Systemen verwendet werden. Es ist so weit verbreitet, dass Sie es wahrscheinlich verwenden, ohne sich dessen bewusst zu sein. Sobald Sie die Unix-Zeit verstanden haben, werden Sie sie in vielen Zusammenhängen erkennen. Verschiedene Tools können Ihnen helfen, mit Unix-Zeit zu arbeiten.
Was ist der Zweck von Unix Time?
Die Unix-Zeit ist die Anzahl der Gesamtsekunden seit einer festen Zeit und einem festen Datum. Es handelt sich um ein Datums- / Uhrzeit- (oder Zeitstempel-) Format, das sich von den von Menschen lesbaren Datums- und Uhrzeitangaben unterscheidet, die wir gewohnt sind. Dies ist rein aus Effizienzgründen. Das Speichern einer einzelnen Zahl, die Sekunden darstellt, benötigt viel weniger Speicherplatz als das Speichern separater Werte für Jahr, Monat, Stunde usw.
In modernen Begriffen ist der Raumunterschied natürlich gar nicht so groß. Bedenken Sie jedoch, dass Unix Ende der 1960er Jahre entstand, als der verfügbare Speicher weitaus kleiner war. Zeitstempel werden auch häufig verwendet, sodass sich ihr Speicher summiert. Beispielsweise sind jeder Datei drei Zeitstempel zugeordnet.
Es ist so gut wie unmöglich, das Format in Ihrem Kopf zu übersetzen, es sei denn, Sie sind ein mathematisches Genie. Aber es hat immer noch einige Vorteile gegenüber besser lesbaren Alternativen wie Mi, 21. Oktober 2015 07:28:00 GMT. Sie können ganz einfach auf einen Blick zwei Unix-Zeitstempel bestellen. In der Regel ist es auch schneller, den Unterschied zwischen zwei Zeitstempeln zu ermitteln. Dies gilt insbesondere für nahe beieinander liegende Daten, z. B. an benachbarten Tagen.
Über die Epoche
Die Unix-Zeit ist also eine Gesamtanzahl von Sekunden seit einem bestimmten Zeitpunkt. Aber was ist dieser Zeitpunkt? Es ist 00:00:00 UTC auf 1. Januar 1970. Dies wird oft als Unix-Epoche bezeichnet. Programmierer wählten dieses Datum aus Bequemlichkeitsgründen für die Epoche, da es das nächstgelegene runde Datum war, als sie die Unix-Zeit erfanden.
Möglicherweise haben Sie dieses Datum gesehen, an dem etwas schief gelaufen ist. Es ist eindeutig ein Fehler, aber einer, der sehr seltsam aussieht, wenn er zu einem Datum vor der Geburt vieler von uns führt! Es ist jedoch völlig verständlich, wenn Sie die Unix-Zeit kennen. Wenn ein System versucht, einen Zeitstempel anzuzeigen, der keinen Wert hat, wird er häufig in 0 übersetzt und führt zum genauen Epochendatum.
Das Unix-Zeitdatenformat
Genau genommen gibt es keine. Der ursprüngliche Datentyp war eine 32-Bit-Ganzzahl, und dies bleibt auch in viel leistungsstärkeren Systemen häufig der Fall.
Mit diesem Datentyp kann der Wert insgesamt 2 ^ 32 Sekunden speichern, was etwas mehr als 136 Jahren entspricht. Dieser Wert ist normalerweise signiert, was bedeutet, dass er negativ oder positiv sein kann. So repräsentiert es normalerweise 68 Jahre auf beiden Seiten der Epoche, d. H. 1902-2038.
Dies ist natürlich immer noch ein begrenzter Zeitraum. Das Zeitstempelformat wurde jedoch hauptsächlich für Konzepte wie die Änderung von Dateien verwendet. Das Bedürfnis bestand sehr darin, die Zeit in der Nähe der Gegenwart und nicht in der alten Geschichte oder weit in der Zukunft darzustellen. Selbst für Anwendungen wie Kalender besteht selten die Notwendigkeit, Daten länger als einige Jahrzehnte in der Zukunft darzustellen.
Das heißt aber nicht, dass diese begrenzte Zeitspanne ohne Probleme ist...
Das Jahr 2038 Problem
Der Y2K Bug (einer der schlimmsten Programmierfehler in der Geschichte) betroffene Computersysteme, die Jahre als zweistellige Werte gespeichert haben. Als das Jahr 2000 kam, behandelten solche Systeme es wie 1900. In diesem Fall war dies nicht so katastrophal wie befürchtet, vor allem, weil viele Menschen im Voraus viel Zeit und Mühe darauf verwendet haben, sich darauf vorzubereiten.
In seiner geschichtsträchtigen Vergangenheit hat die Kodierung auch Zerstörung bewirkt. Instanzen von ein wenig schlechtem Code verursachten eine Katastrophe auf einer größeren Ebene. Das Folgende sind 10 der schlimmsten Programmierfehler in der Geschichte.
Wenn Sie im vorherigen Abschnitt darauf geachtet haben, haben Sie möglicherweise ein ähnliches Problem festgestellt, das sich auf die Unix-Zeit auswirken kann. Nun, die Unix-Zeit hat ein eigenes Datenproblem: das Y2k38-Problem. (Es wird oft als Problem bezeichnet, nicht als Fehler. Vielleicht sind wir seit dem Jahr 2000 optimistischer geworden!) Wenn die Unix-Zeit im Jahr 2038 buchstäblich abläuft, werden neue Daten entweder als 1902 oder 1970 behandelt. Oder möglicherweise scheitern sie einfach ganz.
Zumindest wird uns dieses Problem nicht um Mitternacht am Silvesterabend treffen. Die letzte Sekunde der 32-Bit-Unix-Zeit wird am 19. März fallen. In diesem Fall werden wir wahrscheinlich die meisten Systeme bis 2038 aktualisieren, oder sie werden bis dahin sowieso veraltet sein.
Einige nützliche Zeitstempel-Ressourcen
Das Epochen-Konverter site ist möglicherweise der umfassendste verfügbare Zeitstempelkonverter. Zunächst wird die aktuelle Unix-Zeit in Echtzeit angezeigt und zusätzlich werden fast alle erdenklichen Funktionen hinzugefügt. Die Hauptanwendung ist die Konvertierung zwischen Zeitstempeln und lesbaren Daten in beide Richtungen.
Dan's Tools ist eine riesige Sammlung nützlicher Web-Apps, von denen eine eine ist Zeitstempelkonverter. Es ist einfacher, hat aber eine sehr übersichtliche Darstellung und ist einfach zu bedienen.
Zeit ist präsentiert einen anderen, noch minimalistischeren Look. Es zeigt die Zeit in einer Reihe von Formaten an, einschließlich der Unix-Zeit. Es enthält die aktuelle Uhrzeit in seinem Seitentitel, was nützlich ist.
Unter Linux und MacOS ist die Datum Das Programm ist das Hauptdienstprogramm für den Umgang mit Datum und Uhrzeit, einschließlich Unix-Zeitstempeln. Wird ohne Argumente aufgerufen und gibt das aktuelle Datum und die aktuelle Uhrzeit in einem für Menschen lesbaren Format zurück:
$ Datum
Mi 10. Februar 12:28:30 GMT 2021
Wenn Sie das aktuelle Datum / die aktuelle Uhrzeit in Unix-Zeit benötigen, verwenden Sie die +% s Streit:
$ date +% s
1612960114
Mit können Sie von einem für Menschen lesbaren Datum in einen Zeitstempel konvertieren -d Markieren Sie, wenn Ihre Version von Datum unterstützt es. Die meisten Linux-Versionen sollten standardmäßig:
$ date -d "2. Januar 1970" +% s
82800
Unter macOS Datum ist ein anderes Programm, das einen anderen Satz von Flags erfordert:
$ date -j -f% b% d% Y% T 02. Januar 1970 00:00:00 +% s
82800
Wenn Sie in die andere Richtung gehen, können Sie mithilfe des Konzepts von einem Unix-Zeitstempel konvertieren -r Flagge:
$ date -r 1600000000
So 13 Sep 2020 13:26:40 BST
Einige andere Programme verwenden die % s Format für die Unix-Zeit. Wenn Sie beispielsweise das Änderungsdatum einer Datei in Unix-Zeit anzeigen möchten, verwenden Sie das Linux-Version von lskönnen Sie Folgendes verwenden:
$ ls -l --time-style = +% s index.tmp.html
-rw-r - r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html
Verwendung der Unix-Zeit in Programmiersprachen
PHP hat die Zeit() Funktion, die den aktuellen Unix-Zeitstempel zurückgibt. Es ist Datum() Die Funktion verwendet einen Zeitstempel als zweites Argument:
$ php -r 'Echodatum ("Y-m-d", Uhrzeit ());'
2021-02-11
JavaScript geht die Dinge auf interessante Weise an. Es hat ein Date.now () Methode zum Abrufen der Anzahl von Millisekunden seit der Unix-Epoche. Natürlich können Sie dies durch 1.000 teilen und das Ergebnis runden, um die entsprechende Unix-Zeit in Sekunden zu erhalten:
> Math.floor (Date.now () / 1000)
1613083012
Unix-Zeit verstehen
Unix-Zeit ist ein einfaches Konzept, das an vielen Orten auftaucht. Wenn Sie es erst einmal verstanden haben, finden Sie es möglicherweise sehr nützlich, wenn Sie beispielsweise Zeitunterschiede berechnen. Sie können auch erkennen, wann dies die Ursache für bestimmte Fehler sein kann.
Konzepte wie die Epoche und Zeitstempel sind ein wichtiger Bestandteil des Einstiegs in Linux. Um mehr über das Wesentliche zu erfahren, wie z lsLesen Sie unsere Anleitung zu grundlegenden Linux-Befehlen.
Möchten Sie sich mit Linux vertraut machen? Beginnen Sie mit diesen grundlegenden Linux-Befehlen, um Standard-Computeraufgaben zu erlernen.
- Nicht spezifiziert

Bobby ist ein Technologie-Enthusiast, der fast zwei Jahrzehnte als Softwareentwickler gearbeitet hat. Er liebt das Spielen, arbeitet als Reviews Editor beim Switch Player Magazine und ist in alle Aspekte des Online-Publizierens und der Webentwicklung vertieft.
Abonniere unseren Newsletter
Abonnieren Sie unseren Newsletter für technische Tipps, Rezensionen, kostenlose E-Books und exklusive Angebote!
Noch ein Schritt…!
Bitte bestätigen Sie Ihre E-Mail-Adresse in der E-Mail, die wir Ihnen gerade gesendet haben.