Unix-Timestamp-FAQ

Schnelle Antworten auf die häufigsten Fragen zu Unix-Timestamps — Einheiten, Zeitzonen-Handhabung, das Jahr-2038-Problem, sprachspezifische Umwandlungen und mehr.

Häufig gestellte Fragen

Häufige Fragen zu Unix-Zeitstempeln, Epoch-Zeit, Zeitzonen und dem korrekten Speichern von Zeit — nach Themen geordnet. Nutze die Antworten als Schnellreferenz; tiefergehende Leitfäden sind unten auf der Seite verlinkt.

Wohin als Nächstes

FAQ

Was ist ein Unix-Zeitstempel?
Ein Unix-Zeitstempel ist die Anzahl der Sekunden, die seit der Unix-Epoch — dem 1. Januar 1970 um 00:00:00 UTC — vergangen sind. Es ist eine sprachneutrale, zeitzonenunabhängige Ganzzahl, die jeden Zeitpunkt eindeutig identifiziert.
Was ist die Unix-Epoch?
Die Unix-Epoch ist der 1. Januar 1970 um 00:00:00 UTC. Alle Unix-Zeitstempel werden von diesem festen Bezugspunkt aus vorwärts — oder bei negativen Werten rückwärts — gemessen. Die Wahl von 1970 war praktisch: Es war ein kürzlich vergangenes, rundes Jahr, als Unix bei den Bell Labs entworfen wurde.
Was ist der Unterschied zwischen einem 10-stelligen und einem 13-stelligen Zeitstempel?
Ein 10-stelliger Zeitstempel (z. B. 1700000000) steht für Sekunden seit der Epoch. Ein 13-stelliger Zeitstempel (z. B. 1700000000000) steht für Millisekunden. JavaScripts Date.now() gibt Millisekunden zurück; die meisten Unix-Systemaufrufe und Sprachen wie Python, Go und PHP geben standardmäßig Sekunden zurück.
Warum verwendet JavaScript Millisekunden statt Sekunden?
JavaScripts Date-API wurde so entworfen, dass sie der Auflösung der 1995 verfügbaren System-Timer entsprach. Die Verwendung von Millisekunden vermeidet Präzisionsverluste bei Dauern unter einer Sekunde. Wenn du mit servergenerierten Unix-Zeitstempeln in Sekunden arbeitest, multipliziere mit 1000, bevor du sie an new Date() übergibst.
Wie wandle ich einen Unix-Zeitstempel in JavaScript in ein lesbares Datum um?
Für einen Sekunden-Zeitstempel: new Date(1700000000 * 1000).toISOString(). Für einen Millisekunden-Zeitstempel: new Date(1700000000000).toISOString(). Beide erzeugen ISO-8601-Strings wie '2023-11-15T06:13:20.000Z'. Verwende toLocaleString() mit einer timeZone-Option für eine lokalisierte Anzeige.
Sind Unix-Zeitstempel zeitzonenbewusst?
Nein. Ein Unix-Zeitstempel stellt immer einen einzelnen Zeitpunkt in UTC dar. Zeitzoneninformationen werden nur beim Formatieren des Zeitstempels für die Anzeige angewendet. Zwei Geräte in verschiedenen Zeitzonen erzeugen für denselben Augenblick denselben Unix-Zeitstempel.
Was ist das Jahr-2038-Problem?
Systeme, die Unix-Zeitstempel als vorzeichenbehaftete 32-Bit-Ganzzahlen speichern, können nur Werte bis 2.147.483.647 darstellen, was dem 19. Januar 2038 um 03:14:07 UTC entspricht. Nach diesem Augenblick läuft die Ganzzahl in eine große negative Zahl über. Moderne 64-Bit-Systeme sind nicht betroffen, aber eingebettete Systeme und Altdatenbanken können weiterhin gefährdet sein.
Was ist ein negativer Unix-Zeitstempel?
Ein negativer Unix-Zeitstempel stellt einen Zeitpunkt vor der Unix-Epoch dar. Zum Beispiel ist -86400 der 31. Dezember 1969 um 00:00:00 UTC. Die meisten modernen Datums-APIs behandeln negative Zeitstempel korrekt, aber einige ältere Systeme und Datenbanken unterstützen sie nicht.
Wie erhalte ich einen Unix-Zeitstempel in Python?
Verwende import time; int(time.time()) für Sekunden. Für ein explizites UTC-Datetime: import datetime; int(datetime.datetime.now(datetime.timezone.utc).timestamp()). Für Millisekunden: int(time.time() * 1000).
Wie präzise ist ein Unix-Zeitstempel?
Ein Standard-Unix-Zeitstempel hat eine Genauigkeit von einer Sekunde. Für Sub-Sekunden-Genauigkeit sind Millisekunden-Zeitstempel (13 Stellen) in Web-APIs und JavaScript üblich. Einige Systeme verwenden Mikrosekunden (16 Stellen) oder Nanosekunden. Die passende Einheit hängt von der Präzision ab, die deine Anwendung tatsächlich braucht.
Wie groß kann ein Unix-Zeitstempel sein?
Bei einer vorzeichenbehafteten 64-Bit-Ganzzahl (heutiger Standard) können Unix-Zeitstempel jeden Zeitpunkt von etwa vor 292 Milliarden Jahren bis in 292 Milliarden Jahre in der Zukunft darstellen. Die berühmte 32-Bit-Grenze (das Jahr-2038-Problem) gilt nur für Altsysteme.
Warum zeigt mein Zeitstempel 1970 an?
Meist aus einem von drei Gründen: Der Wert ist 0 (die Epoch selbst), der Wert ist in Millisekunden, wurde aber als Sekunden behandelt (sodass er auf einen winzigen Sekundenwert nahe 0 gerundet wird), oder der Wert ist null/undefined und dein Code hat ihn standardmäßig auf 0 gesetzt.
Was ist der Unterschied zwischen UTC und GMT?
Für die meisten Zwecke sind UTC und GMT austauschbar. UTC (Koordinierte Weltzeit) ist der moderne Atomstandard; GMT (Greenwich Mean Time) ist ein historischer Begriff für die Zeitzone mit Nullversatz. Das Vereinigte Königreich und die meiste Software behandeln sie als gleichwertig.
Sollte ich Daten als Unix-Zeitstempel oder als ISO-8601-Strings speichern?
Beides funktioniert. Unix-Ganzzahlen sind kompakt und trivial zu vergleichen; ISO-8601-Strings sind selbstbeschreibend und menschenlesbar. In Datenbanken sind native Datetime-Typen (TIMESTAMP WITH TIME ZONE in Postgres, DATETIME(6) in MySQL) meist am besten, weil sie Zeitzonensemantik bewahren und effizient indizieren.
Ist die lokale Zeit meines Servers sicher zu speichern?
Nein. Das Speichern lokaler Zeit ohne Versatz verliert Informationen, sobald der Server umzieht, sich die DST ändert oder ein anderer Server in einer anderen Zone den Wert liest. Speichere UTC (als Unix-Zeitstempel oder als zeitzonenbewusstes Datetime) und rechne erst in der Anzeigeschicht in Ortszeit um.
Enthalten Unix-Zeitstempel Schaltsekunden?
POSIX-Unix-Zeit ignoriert Schaltsekunden bewusst — jeder Unix-Tag hat genau 86.400 Sekunden, selbst wenn eine zusätzliche UTC-Sekunde eingefügt wird. Die tatsächliche Sekundenzahl wird wiederholt oder die Uhr wird gedehnt, je nach System.