Wie Sie zwischen Zeitformaten konvertieren
Zeitformate unterscheiden sich zwischen Systemen, APIs und Ländern. Unix-Timestamps in API-Antworten, ISO 8601 in Datenbanken, 12-Stunden-Uhren in den USA, 24-Stunden-Uhren in Europa: Zwischen ihnen umzurechnen ist für Entwickler und alle, die mit internationalen Daten arbeiten, ein ständiger Bedarf. Zu verstehen, warum jedes Format existiert, wo es glänzt und wo es beißt, macht die Umrechnung zu einem schnellen Reflex statt zu einer wiederkehrenden Quelle subtiler Bugs.
Eine kurze Geschichte der Zeitformate
Zeit zu standardisieren ist älter als das Internet. 1884 legte die Internationale Meridiankonferenz die Greenwich Mean Time und den Nullmeridian fest, was der Welt zum ersten Mal eine gemeinsame Referenz gab. Die 24-Stunden-Uhr verbreitete sich aus demselben Grund in Luftfahrt und Militär: Sie beseitigt die AM/PM-Mehrdeutigkeit, die eine Mitternachts-Buchung in einen Mittagsflug verwandelt.
Unix-Zeit kam mit dem ursprünglichen Unix-Kernel 1971 und zählt Sekunden seit dem 1. Januar 1970 UTC (der «Epoche»). Die Wahl war pragmatisch: Ein 32-Bit-Integer konnte Jahrzehnte abdecken, das Sortieren von Timestamps war das Sortieren von Zahlen, und das Berechnen von Intervallen war eine Subtraktion. ISO 8601 kam 1988, um die menschenlesbare Seite zu standardisieren: Jahr-Monat-Tag in Big-Endian-Reihenfolge, T als Datum/Zeit-Trenner und Z für UTC. RFC 3339 (2002) ist ein engeres Profil von ISO 8601, das für Internet-Protokolle ausgelegt ist. RFC 2822 (2001) definiert das E-Mail-Format mit Tagesnamen und Offsets. Jedes Format löst ein echtes Problem; keines ersetzt die anderen vollständig.
Gängige Zeitformate
Sechs Formate decken fast alles ab, was Ihnen in der Praxis begegnet. Die erste Spalte ist der Name, den Sie in der Dokumentation sehen; die Beispielspalte zeigt, wie 14:30 Uhr am 7. April 2024 UTC aussieht.
| Format | Beispiel | Verwendet von |
|---|---|---|
| Unix-Timestamp (Sekunden) | 1712502600 | APIs, Datenbanken, JWT-Tokens, Logzeilen |
| Unix-Timestamp (ms) | 1712502600000 | JavaScript, Java, Android |
| Unix-Timestamp (Mikrosekunden) | 1712502600000000 | Postgres, Kafka, OpenTelemetry |
| ISO 8601 / RFC 3339 | 2024-04-07T14:30:00Z | JSON-APIs, Datenbanken, Logs |
| RFC 2822 | Sun, 07 Apr 2024 14:30:00 +0000 | E-Mail-Header, HTTP-Header |
| 24-Stunden | 14:30 | Europa, Militär, Luftfahrt |
| 12-Stunden | 2:30 PM | USA, informeller Gebrauch |
| Tag des Jahres (Julian) | 2024-098 | Avionik, wissenschaftliche Daten |
| Wochendatum | 2024-W14-7 | Industrielle Planung, Banken |
Die meisten Teams einigen sich auf Unix-Millisekunden für Speicherung und ISO 8601 für Übertragung, mit Anzeigeformaten pro Locale. Die Wahl zählt weniger als Konsistenz: Wählen Sie ein Hauptformat, dokumentieren Sie es und konvertieren Sie an den Rändern.
Schnelle Umrechnungsreferenz
12 Stunden zu 24 Stunden
Die 12-Stunden-Uhr hat zwei Eigenheiten: 12 AM ist Mitternacht (der Tagesanfang) und 12 PM ist Mittag. Die Tabelle unten deckt die Fälle ab, die Leuten Probleme machen.
| 12-Stunden | 24-Stunden |
|---|---|
| 12:00 AM (Mitternacht) | 00:00 |
| 1:00 AM | 01:00 |
| 11:59 AM | 11:59 |
| 12:00 PM (Mittag) | 12:00 |
| 12:01 PM | 12:01 |
| 1:00 PM | 13:00 |
| 6:00 PM | 18:00 |
| 11:59 PM | 23:59 |
Timestamps zu Daten
Der Epoch-Konverter übersetzt Unix-Timestamps sofort in lesbare Daten und zurück. Der Konverter erkennt automatisch sowohl Sekunden- (10 Stellen) als auch Millisekunden-Formate (13 Stellen), sodass Sie einen Wert aus jeder Quelle einfügen können, ohne sich um die Einheit zu sorgen.
Ein nützlicher Plausibilitäts-Check: Teilen Sie durch 86400 (Sekunden pro Tag) und addieren Sie 1970 Tage, um jeden Timestamp im Kopf zu verorten. 1712502600 / 86400 ~ 19820 Tage, also etwa 54 Jahre nach 1970, was ihn in 2024 setzt. Nicht präzise, aber genug, um 1000er-Faktor-Fehler auf einen Blick zu erkennen.
Umrechnungsbeispiele in Code
Die meisten Entwickler müssen Timestamps irgendwann im Code umrechnen. Die Kern-APIs sind kurz:
- JavaScript,
new Date(1712502600 * 1000).toISOString()gibt2024-04-07T14:30:00.000Zzurück. Denken Sie daran, mit 1000 zu multiplizieren, weil JavaScriptsDateMillisekunden erwartet. Andersherum:Math.floor(Date.now() / 1000)liefert einen Sekunden-Timestamp. - Python,
datetime.fromtimestamp(1712502600, tz=timezone.utc).isoformat()gibt2024-04-07T14:30:00+00:00zurück. Vermeiden Sieutcfromtimestamp(); es gibt ein naives Datetime zurück, das der Rest Ihres Codes fälschlich als lokale Zeit behandelt. - Go,
time.Unix(1712502600, 0).UTC().Format(time.RFC3339)gibt2024-04-07T14:30:00Zzurück. Gos time-Paket ist ungewöhnlich, aber konsistent, sobald Sie das Referenz-LayoutMon Jan 2 15:04:05 MST 2006verinnerlicht haben. - Shell,
date -u -d @1712502600 +"%Y-%m-%dT%H:%M:%SZ"auf GNU/Linux, oderdate -u -r 1712502600 +"%Y-%m-%dT%H:%M:%SZ"auf BSD/macOS. Der Flag-Unterschied ist einer der am häufigsten gegoogelten plattformübergreifenden Stolpersteine. - Rust,
chrono::DateTime::<chrono::Utc>::from_timestamp(1712502600, 0).unwrap().to_rfc3339()gibt denselben ISO-String zurück. Die Standardbibliothek hat jetztSystemTime, aber chrono ist immer noch die praktische Wahl für Formatierung. - SQL (Postgres),
SELECT to_timestamp(1712502600) AT TIME ZONE 'UTC';gibt eintimestamptzzurück. MySQL nutztFROM_UNIXTIME(); SQLite nutztdatetime(1712502600, 'unixepoch').
Ein Konverter-Tool ist schneller als jeder dieser Einzeiler, wenn Sie nur einen einzelnen Wert übersetzen müssen, was beim Debuggen meist der Fall ist.
Warum ISO 8601 für Speicherung gewinnt
ISO 8601 (und das RFC-3339-Profil davon) sortiert korrekt als reine Zeichenkette. 2024-04-07T14:30:00Z kommt alphabetisch vor 2024-04-07T15:00:00Z, das vor 2024-04-08T00:00:00Z kommt. Diese Eigenschaft erlaubt es Ihnen, Timestamps ohne Parsen zu sortieren, Logzeilen mit sort | uniq -c zu gruppieren und über Bereiche mit einfachen String-Vergleichen zu räsonieren.
Es ist auch eindeutig auf eine Weise, die die regionalen Formate nicht sind. 04/07/2024 könnte der 7. April (USA) oder der 4. Juli (großer Teil Europas) sein; 2024-04-07 ist in jeder Locale dasselbe. Für Maschine-zu-Maschine-Austausch ist diese Eindeutigkeit mehr wert als jede andere Formatierungs-Überlegung.
Häufige Fallstricke, die zu vermeiden sind
- Zeitzone vergessen,
2026-04-07 14:30ist ohne Zone mehrdeutig. Fügen Sie beim Speichern von ISO-Strings immerZoder einen+00:00-Offset ein, und verlassen Sie sich nie auf die Standardzone des Lesers. - Sekunden und Millisekunden vermischen, ein 10-stelliger Unix-Timestamp ist in Sekunden, ein 13-stelliger in Millisekunden. Sie zu mischen produziert Daten entweder in 1970 oder weit in der Zukunft. Mikrosekunden (16 Stellen) und Nanosekunden (19 Stellen) schleichen sich auch ein, also rechnen Sie damit.
- Sich auf lokale Zeit in Servern verlassen, wenn Ihr Server in UTC läuft und Ihr Benutzer in Tokio ist, speichern Sie UTC und konvertieren Sie bei der Anzeige. Den Server die Locale ableiten zu lassen führt fast immer zu Bugs, wenn Benutzer reisen oder die Sommerzeit umstellt.
- Mit String-Mathematik parsen, schneiden und verketten Sie keine Datums-Strings. Verwenden Sie
Date.parse(),dateutil.parser,chronooder die Standardbibliothek Ihrer Sprache. Manuelles Parsen bricht bei Extremdaten, Schaltjahren und Zeitzonen-Offsets. - Auf
new Date("2024-04-07")vertrauen, JavaScript parst reine Datums-Strings als UTC-Mitternacht, aber Datums-Zeit-Strings ohne Zone als lokale Mitternacht. Das Verhalten unterscheidet sich zwischen Browsern und Node-Versionen. Fügen Sie immer ein explizitesZoder einen Offset ein. - Zweistellige Jahre,
04/07/24könnte je nach Implementierung 1924, 2024 oder 2124 sein. Verwenden Sie überall vierstellige Jahre. - Sommerzeit-Umstellungen, die lokale Uhr überspringt im Frühjahr eine Stunde und wiederholt eine im Herbst. Ein naiver Scheduler kann einen Job an diesen Tagen zweimal oder gar nicht ausführen. Verwenden Sie UTC für Scheduling-Logik und konvertieren Sie nur zur Anzeige.
- Schaltsekunden, Unix-Zeit tut so, als existierten sie nicht, indem sie die betroffene Sekunde verschmiert oder wiederholt. Code, der «verstrichene Sekunden» vergleicht, kann kurz von einer Wanduhr abweichen, die Schaltsekunden respektiert.
- Das Jahr-2038-Problem, 32-Bit-signed-
time_tläuft am 19. Januar 2038 über. Die meisten modernen Systeme nutzen 64-Bit-Zeit, aber alte Embedded-Geräte und alte Datenbankspalten können noch darauf treffen. Auditieren Sie überall, wo SieINT4oderint32für Timestamp-Speicherung sehen. - Locale-abhängige Formatierung,
toLocaleString()in JavaScript und vergleichbare Funktionen in anderen Sprachen produzieren auf verschiedenen Maschinen unterschiedliche Ausgaben. Für maschinenlesbare Timestamps nutzen SietoISOString()oder das Äquivalent; für Anzeige formatieren Sie explizit.
Alternative Werkzeuge und Bibliotheken
Ein Konverter erledigt den Einzelfall; für Produktionscode greifen Sie zu einer Bibliothek.
| Werkzeug / Bibliothek | Sprache | Stärke | Achten Sie auf |
|---|---|---|---|
| Web-Konverter | Browser | Sofort, ohne Installation, behandelt gängige Mehrdeutigkeiten | Ein Wert auf einmal |
dateutil | Python | Toleranter Parser, zeitzonenbewusst | Langsamer als datetime für Massenarbeit |
arrow | Python | Freundliche API, ISO-Defaults | Zusätzliche Abhängigkeit für kleine Projekte |
date-fns | JavaScript | Tree-shakable, unveränderlich | Jede Funktion ist ihr eigener Import |
dayjs | JavaScript | Klein, moment-kompatible API | Plugin-Modell für Extras |
luxon | JavaScript | Erstklassige IANA-Zeitzonen | Größeres Bundle |
chrono | Rust | Reiche Typen, RFC 3339 nativ | Wartungsgeschwindigkeit variiert |
Joda-Time / java.time | Java | Das Referenzdesign, das andere beeinflusste | Vermeiden Sie das Legacy-Date und Calendar |
NodaTime | C#/.NET | Sauber getrennte Instants, Dauern, Kalender | Migration von DateTime ist nicht trivial |
GNU date | Linux-Shell | Flexibles Parsen mit -d | BSD/macOS nutzt inkompatible Flags |
Die richtige Bibliothek hängt von Ihrem Stack ab; die richtige Disziplin ist überall gleich: UTC speichern, ISO 8601 übertragen, nur zur Anzeige formatieren und nie einem Timestamp ohne explizite Zone trauen.
Datenschutz und der Konverter
Der Zeitformat-Konverter läuft vollständig in Ihrem Browser. Die Timestamps, die Sie einfügen, und die Daten, die Sie erzeugen, verlassen die Seite nie. Es gibt kein Server-Log, welche Werte umgerechnet wurden, keine Analytik dazu, welche Formate populär sind, und keine Möglichkeit für irgendjemanden, eine Anfrage mit Ihrer IP zu verknüpfen. Zeitumrechnungen sind an sich keine persönlichen Daten, aber die Timestamps in Ihren Logs (Login-Zeiten, Transaktionszeiten, Scheduling-Fenster) sind es oft, und sie durch einen Drittanbieter-Konverter zu schicken könnte operative Details verraten. Die Arbeit clientseitig zu erledigen, hält diese Information auf Ihrer Maschine, wo sie hingehört. Für eine Aufgabe, die so routiniert ist wie das Umschalten zwischen Sekunden und ISO 8601, sollte die Datenschutz-Voreinstellung sein: keine Übertragung, kein Logging, kein Dritter in der Schleife.
Häufig gestellte Fragen
Was ist das ISO-8601-Format?
ISO 8601 ist der internationale Standard zur Darstellung von Datum und Uhrzeit. Es sieht aus wie 2026-04-07T14:30:00Z, wobei T Datum und Uhrzeit trennt und Z UTC angibt. Es ist unabhängig von der Lokalisierung eindeutig.
Warum verwenden APIs Unix-Timestamps statt lesbarer Daten?
Unix-Timestamps sind eine einzelne Zahl und damit leicht zu speichern, sortieren und vergleichen. Sie sind zeitzonen-neutral (immer UTC) und benötigen weniger Platz als formatierte Datums-Zeichenketten. Der Kompromiss: Sie sind nicht menschenlesbar.
Was bedeutet das Z am Ende eines Zeitstempels?
Das Z steht für „Zulu time", einen anderen Namen für UTC (Coordinated Universal Time). Ein Timestamp, der mit Z endet, ist in UTC, nicht in Ortszeit.
Wie konvertiere ich 24-Stunden- in 12-Stunden-Zeit?
Für die Stunden 1-12 bleibt die Zeit gleich (AM für 0-11, PM für 12 hinzufügen). Für die Stunden 13-23 ziehen Sie 12 ab und fügen PM hinzu. 00:00 ist 12:00 AM (Mitternacht). 12:00 ist 12:00 PM (Mittag).
What is the Year 2038 problem?
32-bit signed Unix timestamps overflow on 19 January 2038 at 03:14:07 UTC, after which they wrap around to negative values that look like dates in 1901. Most modern systems use 64-bit timestamps and are unaffected, but legacy embedded devices, old databases, and 32-bit time_t in some C code still need to be audited.
How are leap seconds handled in Unix time?
Unix time pretends leap seconds do not exist. The clock simply repeats or stretches the affected second, so a Unix timestamp is not a strict count of elapsed SI seconds. For most applications this is fine, but precision-timing code (astronomy, GPS, high-frequency trading) needs TAI or UTC with explicit leap-second handling.