Unix-Timestamp-Formate erklärt
Eine vollständige Referenz für alle Unix-Timestamp-Formate — Sekunden, Millisekunden, Mikrosekunden, ISO 8601 und RFC 2822 — mit Beispielen, die zeigen, welches Format jede Sprache und Datenbank verwendet und wie man sie auf einen Blick unterscheidet.
Jedes Unix-Timestamp-Format auf einen Blick
Ein Unix-Timestamp ist nur eine Zahl, und sein Format ist eigentlich nur seine Einheit — wie fein er ab dem 1. Januar 1970 UTC zählt. Die Einheit ist fast immer an der Ziffernzahl ablesbar: 10 Ziffern sind Sekunden, 13 sind Millisekunden, 16 sind Mikrosekunden, 19 sind Nanosekunden. Die beiden String-Formate, ISO 8601 und RFC 2822, sind stattdessen selbstbeschreibend. Die Tabelle unten ist die gesamte Landschaft; die folgenden Abschnitte behandeln jedes Format und wie man sie unterscheidet.
| Format | Ziffern | Beispiel | Verwendet von |
|---|---|---|---|
| Sekunden | 10 | 1700000000 | Python, PHP, Go, Ruby, C, SQL |
| Millisekunden | 13 | 1700000000000 | JavaScript, Java, .NET |
| Mikrosekunden | 16 | 1700000000000000 | PostgreSQL, Rust |
| Nanosekunden | 19 | 1700000000000000000 | Go UnixNano, Tracing-Systeme |
| ISO 8601 | String | 2023-11-15T06:13:20Z | APIs, Logs (selbstbeschreibend) |
| RFC 2822 | String | Wed, 15 Nov 2023 06:13:20 GMT | E-Mail, HTTP-Header |
Unix-Zeit in Sekunden — das universelle Format
Das häufigste Format: eine 32-Bit- oder 64-Bit-Ganzzahl, die die Anzahl ganzer Sekunden seit dem 1. Januar 1970 00:00:00 UTC zählt. Derzeit eine 10-stellige Zahl um 1,7 Milliarden.
- Beispiel: 1700000000 = 2023-11-15 06:13:20 UTC
- Verwendet von: Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
- Gespeichert als: 32-Bit-int (alt, max. Jahr 2038), 64-Bit-int (modern, sicher für Milliarden Jahre)
- Datenbank: MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT
Unix-Zeit in Millisekunden — JavaScripts Format
Millisekunden seit der Unix-Epoche: eine 13-stellige Ganzzahl mit Millisekunden-Präzision. Das ist das Format, das JavaScripts Date-Objekt intern verwendet.
- Beispiel: 1700000000000 = 2023-11-15 06:13:20.000 UTC
- Verwendet von: JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
- Umrechnung in Sekunden: Math.floor(ms / 1000)
- Umrechnung aus Sekunden: seconds * 1000
ISO 8601 — der menschenlesbare Standard
ISO 8601 ist ein internationaler Standard zur Darstellung von Datum und Uhrzeit als Strings. Anders als Unix-Timestamps ist er selbstbeschreibend: das Format kodiert sowohl Datum/Uhrzeit als auch den Zeitzonen-Offset.
- 2023-11-15T06:13:20Z — UTC (das Z-Suffix bedeutet UTC)
- 2023-11-15T01:13:20-05:00 — mit explizitem UTC-Offset (EST)
- 2023-11-15T06:13:20.000Z — mit Millisekunden
- JavaScript: date.toISOString() liefert immer UTC mit Z-Suffix
- Python: datetime.isoformat(), Go: time.Format(time.RFC3339)
RFC 2822 — E-Mail- und HTTP-Datumsformat
RFC 2822 (aktualisiert durch RFC 5322 für E-Mail und gespiegelt durch RFC 9110 für HTTP) ist das menschenlesbare Datumsformat in E-Mail-Headern und HTTP-Antworten. JavaScripts Date.toUTCString() liefert dieses Format.
- Beispiel: Wed, 15 Nov 2023 06:13:20 GMT
- Verwendet in: HTTP-Antwort-Headern (Last-Modified, Date, Expires), E-Mail-Headern (Date:)
- JavaScript: date.toUTCString()
- In modernen APIs seltener, aber in der Web-Infrastruktur noch weit verbreitet
Wie man das Timestamp-Format erkennt
Wenn du einen unbekannten Timestamp-Wert erhältst, identifizieren diese Regeln sein Format. Die Ziffernzahl klärt jeden numerischen Fall; die beiden String-Formate sind auf den ersten Blick offensichtlich.
| Hinweis | Format |
|---|---|
| 10 Ziffern | Unix-Sekunden |
| 13 Ziffern | Unix-Millisekunden |
| 16 Ziffern | Mikrosekunden |
| 19 Ziffern | Nanosekunden |
| Enthält T oder Z | ISO 8601 |
| Komma oder Wochentagsname | RFC 2822 |
| Negative Ganzzahl | Sekunden oder Millisekunden vor 1970 |
- Plausibilitätsprüfung: jeder numerische Wert sollte zu einem glaubwürdigen Datum der aktuellen Ära dekodieren (etwa 2001–2038 für 10-stellige Sekunden)
- Ein Datum nahe 1970 oder Tausende Jahre entfernt bedeutet, dass die Einheit falsch gelesen wurde
Mikrosekunden und Nanosekunden
Manche hochpräzisen Systeme verwenden Einheiten kleiner als Millisekunden. Diese sind in Anwendungscode selten, tauchen aber in Low-Level-Systemen, Datenbank-Internas und Observability-Tools auf.
- Mikrosekunden (µs): 16-stellige Ganzzahl — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
- Nanosekunden (ns): 19-stellige Ganzzahl — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
- PostgreSQL EXTRACT(EPOCH) liefert eine Gleitkommazahl mit Mikrosekunden als Nachkommateil
- Umrechnung von Nanosekunden in Sekunden: durch 1.000.000.000 (1e9) teilen
Auflösung und Sekundenbruchteil-Präzision
Jedes Format oben trägt eine andere Zeitauflösung. Ein Format zu wählen heißt zu wählen, wie fein du zwei Momente unterscheiden kannst — von einer Sekunde bis zu einer Nanosekunde.
- 1-Sekunden-Auflösung: Unix-Sekunden (10 Ziffern), traditionelles POSIX time_t
- 1-Millisekunde: JavaScript Date, MongoDB BSON Date, Java Instant.toEpochMilli()
- 1-Mikrosekunde: Chrome/WebKit-Timestamps, Python datetime.timestamp(), PostgreSQL timestamp precision 6
- 100-Nanosekunden: Windows FILETIME, .NET DateTime.Ticks
- 1-Nanosekunde: Java Instant (volle Präzision), Go time.UnixNano(), JS Temporal.Instant.epochNanoseconds (BigInt)
- Pikosekunde und darunter: PTP/IEEE-1588-Wire-Format (1/2^32 einer Sekunde), NTP-Fraction-Feld
- Wähle die gröbste Auflösung, die deine Anforderungen erfüllt — Subsekunden-Präzision geht oft bei JSON-Serialisierung oder String-Round-Trip verloren
- Beim Konvertieren zwischen Formaten über Unix-Millisekunden oder -Nanosekunden (via BigInt) gehen — das ist der kleinste gemeinsame Nenner, der die Präzision bewahrt
Timestamp-Format-Konverter
Konvertiere zwischen Unix-Zeit und den plattformspezifischen Timestamp-Formaten, denen du in freier Wildbahn begegnest:
FAQ
- Wie viele Ziffern hat ein Unix-Timestamp?
- Ein moderner Unix-Timestamp in Sekunden hat 10 Ziffern (etwa 1,7 Milliarden); in Millisekunden sind es 13 Ziffern. Mikrosekunden haben 16 Ziffern und Nanosekunden 19 Ziffern.
- Welches Timestamp-Format verwendet JavaScript?
- JavaScripts Date arbeitet in Millisekunden — Date.now() liefert einen 13-stelligen Millisekunden-Timestamp, und new Date(ms) erwartet Millisekunden. Multipliziere Unix-Sekunden mit 1000, bevor du sie an Date übergibst.
- Was ist der Unterschied zwischen Unix-Zeit und ISO 8601?
- Unix-Zeit ist eine einzelne Zahl von Sekunden oder Millisekunden seit 1970 UTC und trägt keine Zeitzone. ISO 8601 ist ein selbstbeschreibender String wie 2023-11-15T06:13:20Z, der Datum, Uhrzeit und Offset kodiert.
- Was ist das RFC-2822-Datumsformat?
- RFC 2822 (aktualisiert durch RFC 5322) ist das menschenlesbare Datumsformat in E-Mail- und HTTP-Headern, etwa "Wed, 15 Nov 2023 06:13:20 GMT". JavaScript erzeugt es mit date.toUTCString().
- Wie erkenne ich, ob ein Timestamp in Sekunden oder Millisekunden vorliegt?
- Zähle die Ziffern: ein 10-stelliger Wert ist Sekunden, ein 13-stelliger Wert ist Millisekunden. Wenn ein Wert zu einem Datum nahe 1970 oder weit in der Zukunft umgerechnet wird, wurde die Einheit falsch gelesen.