Zeitstempel und Zeitzonen in der Praxis
Praxisleitfaden zu Unix-Zeit, UTC, Zeitzonen, Tageslängen und Cron-Ausdrücken - mit Links zu Rechner, FAQs und Glossar.
Wenn eine Uhrzeit in Log, API, Datenbank oder Cron-Job falsch wirkt, prüfe nicht sofort den Wert selbst. Meist ist zuerst unklar, ob du einen Zeitpunkt, eine Dauer, eine lokale Anzeige oder einen Scheduler-Kontext vor dir hast. Diese Reihenfolge spart Umwege: Werttyp klären, Einheit prüfen, UTC und lokale Anzeige trennen, Dauer gegen Kalendertag abgrenzen, dann die Cron-Umgebung anschauen.
Zeitwert zuerst klären: Zeitpunkt oder Dauer?
Ein Zeitpunkt meint einen bestimmten Moment: ein Login um 2026-07-24T12:30:00Z,
ein Datenbankfeld created_at oder ein Unix-Wert in einem Event. Eine Dauer
meint dagegen einen Abstand: Timeout, Cache-Zeit, Token-Geltung oder Laufzeit.
Beide können als Sekunden auftauchen, verhalten sich aber anders. Einen
Zeitpunkt wandelst du in eine Anzeige um. Eine Dauer rechnest du zwischen
Millisekunden, Sekunden, Minuten oder Stunden um.
Typische Fundstellen verraten viel. Logs und API-Antworten enthalten oft Zeitpunkte, manchmal in ISO-Form, manchmal als Zahl. Datenbanken speichern je nach Spalte und Anwendung UTC, lokale Zeit oder einen zeitzonenlosen Textwert. Cron steht wieder anders da: Der Ausdruck beschreibt wiederkehrende lokale Ausführungszeiten in einer Laufzeitumgebung, nicht einen einzelnen gespeicherten Moment.
Für Zahlenwerte ist der
Unix-Zeitstempel-Umrechner der erste sinnvolle
Check. Er zeigt denselben Wert als UTC-Ausgabe und als lokale Anzeige. Wenn du
dagegen eine Dauer wie 900 Sekunden, 15 Minuten oder 86400 Sekunden
einordnen willst, passt der
Zeitspannen-Umrechner besser.
Unix-Zeit: Sekunden, Millisekunden und UTC
Unix-Zeit beschreibt einen Zeitpunkt als Zahl seit der Unix-Epoch. In klassischer Form sind das Sekunden; viele Web-Umgebungen arbeiten aber mit Millisekunden. Der schnelle Einheitencheck ist die Stellenzahl: Ein aktueller Sekundenwert ist deutlich kürzer als ein Millisekundenwert. Die Detailregel steht in der FAQ Ist ein Unix-Zeitstempel in Sekunden oder Millisekunden?.
Der häufigste Fehler ist eine falsche Interpretation der Einheit. Wird ein Millisekundenwert als Sekundenwert gelesen, landet das Ergebnis weit in der Zukunft. Wird ein Sekundenwert als Millisekundenwert gelesen, liegt das Ergebnis nahe an der Epoch. Bevor du Offset, Sommerzeit oder Cron suchst, muss diese Ebene stimmen.
Als Vergleichsbasis ist UTC am robustesten. UTC ist keine lokale Uhrzeit in Berlin, Wien oder Zürich, sondern die gemeinsame Referenz, mit der Systeme Zeitpunkte austauschen und vergleichen. In Logs ist deshalb eine UTC-Ausgabe oft hilfreicher als eine lokal formatierte Anzeige. Sie nimmt die Frage heraus, welche Ortsregel gerade angewendet wurde.
Wenn du UTC mit Unix-/POSIX-Zeit sekundengenau vergleichst, ist die Schaltsekunde der relevante Sonderfall: Unix-Zeitstempel zählen sie nicht als eigene fortlaufende Sekunde mit.
Zeitzonen: Speicherung und lokale Anzeige trennen
Ein Unix-Zeitstempel enthält keine Zeitzone. Er bleibt dieselbe Zahl, egal ob du ihn als UTC, Europe/Berlin oder eine andere lokale Ansicht darstellst. Die Zeitzone entscheidet erst, welche Uhrzeit Menschen auf dem Bildschirm sehen. Die kurze Ja/Nein-Antwort steht in der FAQ Hat ein Unix-Zeitstempel eine Zeitzone?.
Praktisch heißt das: Speichere oder vergleiche den Zeitpunkt möglichst in
einer eindeutigen Zeitbasis, und formatiere ihn erst an der Stelle, an der eine
lokale Anzeige gebraucht wird. Wenn ein Wert “eine Stunde falsch” aussieht, ist
oft nicht der gespeicherte Moment falsch, sondern die Anzeigezone, ein fehlendes
Z, ein falsch angenommener Offset oder eine automatische Browser-/Serverzone.
Europe/Berlin ist ein gutes Beispiel, weil der Name nicht nur einen festen
Offset meint. Er verweist auf ein Regelwerk für lokale Zeit, einschließlich
historischer und geplanter Sommerzeitregeln. Genau solche Regeln werden in der
IANA Time Zone Database für Software gepflegt. Harte Offset-Angaben gehören
deshalb nicht als dauerhafte Faustregel in Code oder Dokumentation, wenn
eigentlich eine Ortszeitzone gemeint ist.
Sommerzeit und Kalendertage: warum 24 Stunden nicht immer lokal passen
Eine Dauer von 24 Stunden ist nicht dasselbe wie “der nächste lokale Kalendertag”. Als feste Dauer sind 24 Stunden 86.400 Sekunden. Lokal kann ein Kalendertag an Zeitumstellungstagen kürzer oder länger wirken, weil die Uhr springt. Die kompakte Rechenantwort steht in der FAQ Wie viele Sekunden hat ein Tag?.
Beim Debugging ist die Frage: Willst du eine feste Dauer addieren oder einen Kalendertag in einer Zeitzone treffen? Für Timeouts, Retry-Abstände und Cache-Zeiten ist eine feste Dauer meist richtig. Für “täglich um 8:00 Uhr”, “am Monatsende” oder “nächster Arbeitstag” brauchst du Kalenderlogik mit Zeitzone. Sonst entstehen Fehler genau an den Tagen, an denen lokale Zeit nicht wie eine einfache Sekundenrechnung aussieht.
Cron in der Praxis: Ausdruck lesen und Laufzeitumgebung prüfen
Cron löst ein anderes Problem als ein Unix-Zeitstempel. Ein Cron-Ausdruck beschreibt wiederkehrende Ausführungen. Zuerst liest du die fünf Felder für Minute, Stunde, Tag des Monats, Monat und Wochentag. Wie die Felder und Grundzeichen funktionieren, erklärt die FAQ Wie liest man einen Cron-Ausdruck?.
Danach kommt der Punkt, der in der Praxis häufiger weh tut: In welcher Zeitzone wertet der Server, Container, Scheduler oder Hostingdienst den Ausdruck aus? Cron-Ausdrücke selbst enthalten keine Zeitzone, das legt erst die Laufzeitumgebung fest. Die Details dazu erklärt die FAQ Läuft mein Cronjob in UTC oder Lokalzeit?.
Bei Zeitumstellungen wird der Unterschied sichtbar. Ein Job, der lokal immer zur gleichen Uhrzeit laufen soll, folgt anderen Regeln als ein Job, der alle 24 Stunden mit festem Abstand laufen soll. Das ist keine reine Cron-Syntaxfrage, sondern eine Frage der Laufzeitumgebung. Was das für die geplante Stunde an einem Umstellungstag konkret bedeutet, zeigt die FAQ Was passiert mit Cronjobs bei der Zeitumstellung?; einen eigenen Ausdruck übersetzt das Cron-Ausdruck-Werkzeug direkt in Klartext.
Checkliste für Logs, APIs und geplante Jobs
- Ist der Wert ein Zeitpunkt oder eine Dauer? Zeitpunkt im Unix-Zeitstempel-Umrechner prüfen, Dauer im Zeitspannen-Umrechner.
- Ist die Einheit Sekunden oder Millisekunden? Erst die Stellenzahl und die Quelle prüfen, dann umrechnen.
- Ist die Zeitbasis klar? UTC-Ausgabe und lokale Anzeige getrennt betrachten.
- Wird eine Zeitzone nur angezeigt oder versehentlich als Teil des Zeitstempels behandelt?
- Geht es um 24 Stunden feste Dauer oder um einen lokalen Kalendertag?
- Bei Cron: Stimmen Ausdruck, Server-/Scheduler-Zeitzone und erwartete lokale Uhrzeit zusammen?
- Bei einer Datumseingabe: Ist klar, welche Zeitzone dein Umrechner beim Parsen annimmt? Kommt drauf an, wie du das Datum schreibst, siehe FAQ Welche Zeitzone gilt für meine Datumseingabe?.
Wenn nach diesen sieben Punkten noch eine Verschiebung bleibt, liegt der Fehler meist nicht mehr in der einfachen Umrechnung, sondern in Anwendungslogik oder einer anbieterspezifischen Scheduler-Regel — Punkt 7 deckt die Eingabeschreibweise bereits ab. Dann lohnt es sich, den Rohwert, die UTC-Anzeige und die lokale Anzeige nebeneinander zu dokumentieren, bevor du den Code änderst.