Was ist Unix-Zeit und wann war die Unix-Epoche?

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 ist ein Datums- / Uhrzeitformat (oder Zeitstempelformat), 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.

Das Format ist so gut wie unmöglich 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. Normalerweise 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.

Was ist Unix-Zeit und wann war die Unix-Epoche? - epoch converter

Über die Epoche

Die Unix-Zeit ist also eine Gesamtzahl von Sekunden seit einem bestimmten Zeitpunkt. Aber was ist dieser Zeitpunkt? Es ist 00:00:00 UTC am 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 keinen. 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, dh 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 der alten Geschichte oder weit in die 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- Fehler ( einer der schlimmsten Programmierfehler in der Geschichte ) betraf Computersysteme, die Jahre als zweistellige Werte gespeichert hatten. Als das Jahr 2000 kam, behandelten solche Systeme es wie 1900. In diesem Fall war dies nicht so katastrophal wie befürchtet, hauptsächlich weil viele Menschen im Voraus viel Zeit und Mühe darauf verwendet hatten, sich darauf vorzubereiten.

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 Systeme neue Daten entweder als 1902 oder 1970 behandeln. Ich werde einfach ganz scheitern.

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

Die Epoch Converter- Site ist möglicherweise der umfassendste verfügbare Zeitstempelkonverter. Zunächst wird die aktuelle Unix-Zeit in Echtzeit angezeigt, und es 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 ein Zeitstempelkonverter ist . Es ist einfacher, hat aber eine sehr saubere Präsentation und ist einfach zu bedienen.

Time.is präsentiert einen weiteren, 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.

Was ist Unix-Zeit und wann war die Unix-Epoche? - time is

Verwenden der Unix-Zeit mit Befehlszeilentools

Unter Linux und MacOS ist das Datumsprogramm 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:

 $ date
Wed Feb 10 12:28:30 GMT 2021

Wenn Sie das aktuelle Datum / die aktuelle Uhrzeit in Unix-Zeit benötigen, verwenden Sie das Argument +% s :

 $ date +%s
1612960114

Sie können mit dem Flag -d von einem für Menschen lesbaren Datum in einen Zeitstempel konvertieren, wenn Ihre Datumsversion dies unterstützt. Die meisten Linux-Versionen sollten standardmäßig:

 $ date -d "Jan 2 1970" +%s
82800

Unter macOS ist date ein anderes Programm, für das andere Flags erforderlich sind:

 $ date -j -f "%b %d %Y %T" "Jan 02 1970 00:00:00" "+%s"
82800

Wenn Sie in die andere Richtung gehen, können Sie mit dem Flag -r von einem Unix-Zeitstempel konvertieren:

 $ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Einige andere Programme verwenden das % s- Format, um mit der Unix-Zeit umzugehen. Wenn Sie beispielsweise das Änderungsdatum einer Datei in Unix-Zeit mit der Linux-Version von ls anzeigen möchten, kö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 Funktion time () , die den aktuellen Unix-Zeitstempel zurückgibt. Die Funktion date () verwendet einen Zeitstempel als zweites Argument:

 $ php -r 'echo date("Ymd", time());'
2021-02-11

JavaScript geht die Dinge auf interessante Weise an. Es verfügt über eine Date.now () -Methode, um die Anzahl der Millisekunden seit der Unix-Epoche abzurufen . 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. Weitere Informationen zu wichtigen Elementen wie ls finden Sie in unserer Anleitung zu grundlegenden Linux-Befehlen.