Tools Blog

Was ist Unix-Epochenzeit? Ein Entwicklerhandbuch zu Zeitstempeln

Unix Epoch Timestamp Explained

Wenn Sie jemals eine Datenbank abgefragt oder mit einer modernen API gearbeitet haben, haben Sie wahrscheinlich gesehen, dass Datumsangaben nicht als „12. Oktober 2026“, sondern als riesige, einschüchternde Zahlenfolge wie 1791800000 zurückgegeben wurden. Dies ist ein Unix-Zeitstempel und das universelle Rückgrat der Zeitmessung in der Informatik.

Der Umgang mit Datums- und Uhrzeitangaben in der Programmierung ist bekanntermaßen schwierig. Zeitzonen ändern sich, die Sommerzeit beginnt und endet unvorhersehbar und Schaltjahre führen zusätzliche Tage ein. Um diese chaotische Realität zu lösen, beschlossen die Ingenieure, die das Unix-Betriebssystem entwickelten, ihre eigene absolute Zeitachse zu erfinden.

🎥 Lehrvideo: Das Y2K38-Problem und die Epochenzeit (Platzhalter für eingebettetes YouTube-Konzept-Tutorial)

Der Ursprung: 1. Januar 1970

Ein Unix-Zeitstempel ist einfach die Anzahl der Sekunden, die seit dem 1. Januar 1970 um 00:00:00 UTC vergangen sind. Genau dieser Moment in der Geschichte ist als „Unix-Epoche“ bekannt.

Warum 1970? Denn in den frühen 1970er Jahren war die Lagerung unglaublich teuer. Das Speichern eines Datums als für Menschen lesbare Zeichenfolge wie „1970-01-01 00:00:00“ nimmt fast 20 Byte Speicher in Anspruch. Das Speichern als einzelne 32-Bit-Ganzzahl erforderte nur 4 Bytes. Indem sie den Ausgangspunkt in die Nähe der Zeit legten, als Unix erfunden wurde, maximierten sie die Menge an zukünftiger Zeit, die sie innerhalb dieser 4 Bytes speichern konnten.

Warum Entwickler Unix-Zeitstempel lieben

Der Hauptgrund dafür, dass die Unix-Zeit allgemein in APIs, Datenbanken und Microservices übernommen wird, ist, dass sie keine Zeitzone hat. Es repräsentiert weltweit einen einzigen, absoluten Zeitpunkt.

Wenn Sie ein Ereignis in einer Datenbank unter Verwendung der lokalen Serverzeit („03:00 PM EST“) speichern und Ihren Server später nach London migrieren, werden Ihre gesamten Berechnungen unterbrochen. Wenn jedoch ein Ereignis zum Zeitstempel 1700000000 auftritt, ist diese Zahl identisch, unabhängig davon, ob sich der Benutzer, der sie abfragt, in Tokio, New York oder Paris befindet. Die Frontend-Anwendung nimmt einfach diese Ganzzahl und wandelt sie mathematisch in die lokale Zeitzone des Benutzers auf seinem Bildschirm um.

Konvertieren Sie Zeitstempel sofort

Versuchen Sie nicht, Sekunden im Kopf zu berechnen. Nutzen Sie unser Offline-Tool, um 10- oder 13-stellige Zeitstempel sofort in für Menschen lesbare Daten in Ihrer lokalen Zeitzone zu übersetzen.

Öffnen Sie den Zeitstempelkonverter

Sekunden vs. Millisekunden (Die 10- vs. 13-Ziffern-Regel)

Einer der häufigsten Fehler in der Webentwicklung besteht darin, einer Funktion einen Zeitstempel zu übergeben und ein Datum im Jahr 1970 oder im Jahr 52.000 zu erhalten. Dies geschieht aufgrund einer Verwechslung zwischen Sekunden und Millisekunden.

  • Standard-Unix-Zeit (Sekunden): Eine 10-stellige Zahl (z. B. 1700000000). Dies ist der Standard in Linux, PHP und den meisten Backend-Datenbanken wie MySQL.
  • JavaScript-Zeit (Millisekunden): Eine 13-stellige Zahl (z. B. 1700000000000). Die Funktion Date.now() von JavaScript berücksichtigt Millisekunden für eine höhere Präzision.

Wenn Sie einen 10-stelligen Backend-Zeitstempel in JavaScript eingeben, ohne ihn mit 1000 zu multiplizieren, geht JavaScript davon aus, dass Sie von den ersten Tagen des Januar 1970 sprechen.

// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);

console.log(dateObject.toLocaleDateString()); // Converts to local user timezone

Das Jahr-2038-Problem (Y2K38)

Die Unix-Zeit hat eine bevorstehende Frist. Da es ursprünglich als vorzeichenbehaftete 32-Bit-Ganzzahl gespeichert wurde, beträgt die maximale Zahl, die es aufnehmen kann, 2.147.483.647.

Am 19. Januar 2038 um 03:14:07 UTC wird die Unix-Uhr diese Höchstzahl erreichen. Eine Sekunde später läuft die Ganzzahl über und wird zu einer negativen Zahl. Ältere Systeme, die nicht auf die 64-Bit-Architektur aktualisiert wurden, glauben plötzlich, es sei das Jahr 1901, was weltweit zu katastrophalen Softwareausfällen führt.

Glücklicherweise sind fast alle modernen Hardwarekomponenten, Datenbanken und Programmiersprachen (wie 64-Bit-Linux-Kernel und moderne Node.js) bereits auf 64-Bit-Zeit umgestellt, was den nächsten Überlauf Milliarden von Jahren in die Zukunft verschiebt.

Häufig gestellte Fragen (FAQ)

Berücksichtigt die Unix-Zeit Schaltsekunden?

Überraschenderweise nein. Die Unix-Zeit geht davon aus, dass jeder Tag genau 86.400 Sekunden hat. Wenn die Welt eine „Schaltsekunde“ hinzufügt, um sich an die Erdrotation anzupassen, wiederholen Unix-Systeme normalerweise einfach denselben Zeitstempel zweimal, um synchron zu bleiben, ohne mathematische Berechnungen zu unterbrechen.

Kann ein Unix-Zeitstempel negativ sein?

Ja. Jeder Zeitstempel kleiner als 0 stellt ein Datum vor der Unix-Epoche (1. Januar 1970) dar. Beispielsweise steht -86400 genau für den 31. Dezember 1969.

Warum wird in meinem umgerechneten Datum immer 1970 angezeigt?

Sie übergeben wahrscheinlich einen 10-stelligen Zeitstempel an eine Funktion, die 13 Ziffern (Millisekunden) erwartet. Multiplizieren Sie Ihren Zeitstempel mit 1000, bevor Sie ihn konvertieren.