0
1970-01-01T00:00:00Z
946684800
2000-01-01T00:00:00Z
2147483647
2038-01-19T03:14:07Z — max for 32-bit signed int
9223372036854775807
~292 billion years — no practical overflow
86400000
60 × 60 × 24 × 1000
31536000
365 × 24 × 60 × 60 (non-leap)
2024-01-15T12:30:00Z
YYYY-MM-DDTHH:MM:SSZ — widely recommended
2024-01-15T07:30:00-05:00
YYYY-MM-DDTHH:MM:SS±HH:MM
Mon, 15 Jan 2024 12:30:00 +0000
Used in email headers and HTTP headers
2024-01-15T12:30:00.000Z
Subset of ISO 8601 with milliseconds
Mon, 15 Jan 2024 12:30:00 GMT
Used in HTTP headers (Last-Modified, Date)
01/15/2024
Ambiguous — avoid in APIs
15/01/2024
Ambiguous — avoid in APIs
2024-01-15
SQL DATE type, BigQuery, Redshift
20240115123000
Lexicographically sortable
Date.now()
Returns milliseconds since epoch
Math.floor(Date.now() / 1000)
Returns whole seconds
new Date(ts * 1000).toISOString()
Multiply by 1000 if ts is in seconds
Math.floor(new Date('2024-01-15T12:30:00Z').getTime() / 1000)import time; time.time()
Returns float with sub-second precision
from datetime import datetime, timezone datetime.fromtimestamp(ts, tz=timezone.utc)
Always pass tz=timezone.utc to avoid local timezone
from datetime import datetime, timezone
datetime.fromisoformat('2024-01-15T12:30:00+00:00').timestamp()SELECT EXTRACT(EPOCH FROM NOW())::BIGINT;
Returns whole seconds
SELECT to_timestamp(1705319400);
SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(1705319400);
time.Now().UnixNano()
Nanoseconds precision
time.Now().Unix()
SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()
time()
Returns seconds; microtime(true) for float
date +%s
GNU/BSD date; on macOS same command works
+00:00
Coordinated Universal Time — no DST
-05:00 / -04:00
EST in winter, EDT in summer (DST)
-06:00 / -05:00
-07:00 / -06:00
-08:00 / -07:00
+00:00 / +01:00
BST (British Summer Time) in summer
+01:00 / +02:00
Germany, France, Italy, Poland, etc.
+05:30
No DST — half-hour offset
+08:00
No DST — entire country one timezone
+09:00
No DST
+10:00 / +11:00
DST in southern hemisphere summer (Oct–Apr)
+12:00 / +13:00
| Einheit | Stellen | Beispiel | Bereich ca. |
|---|---|---|---|
| Seconds (s) | 10 | 1705319400 | 1970 – 2286 |
| Milliseconds (ms) | 13 | 1705319400000 | 1970 – 2286 (×1000) |
| Microseconds (μs) | 16 | 1705319400000000 | Sub-second precision |
| Nanoseconds (ns) | 19 | 1705319400000000000 | Used by Go, Rust, Linux kernel |
Unix-Zeitstempel sind immer UTC. Sie enthalten keine Zeitzoneninformation. Das ist tatsächlich ein Vorteil — es bietet einen universellen Referenzpunkt.
Die Verwirrung entsteht bei der Umrechnung von Zeitstempeln in lesbare Daten:
const ts = 1700000000;
const date = new Date(ts * 1000);
date.toUTCString(); // "Tue, 14 Nov 2023 22:13:20 GMT"
date.toLocaleString(); // Abhängig von der lokalen Zeitzone des Benutzers
date.toISOString(); // "2023-11-14T22:13:20.000Z"
Best Practice: Zeitstempel in UTC speichern und übertragen. Nur auf der Darstellungsebene in lokale Zeit umrechnen, so nah am Benutzer wie möglich.
-- Aktueller Zeitstempel
SELECT EXTRACT(EPOCH FROM NOW());
-- Zeitstempel zu Datum
SELECT TO_TIMESTAMP(1700000000);
-- Datum zu Zeitstempel
SELECT EXTRACT(EPOCH FROM '2023-11-14'::timestamp);
Wenn ein Datum als Januar 1970 angezeigt wird, haben Sie wahrscheinlich Sekunden übergeben, wo Millisekunden erwartet wurden (oder umgekehrt). Prüfen Sie immer, welche Präzision die API erwartet.
Beim Speichern von Zeitstempeln als Gleitkommazahlen können Sie Präzision jenseits von Millisekunden verlieren. Für Mikrosekunden- oder Nanosekunden-Präzision verwenden Sie Ganzzahlen mit dem entsprechenden Multiplikator.
Unix-Zeitstempel berücksichtigen keine Schaltsekunden. Ein Unix-Tag ist immer genau 86.400 Sekunden, auch wenn tatsächliche UTC-Tage gelegentlich 86.401 Sekunden haben. Für die meisten Anwendungen ist dies irrelevant. Für wissenschaftliche oder Satellitenanwendungen verwenden Sie stattdessen TAI (Internationale Atomzeit).
Speichern Sie Daten als Zeitstempel (Ganzzahl oder native Datetime-Typen) für effizientes Sortieren, Vergleichen und Rechnen. Formatierte Zeichenketten sind schwerer abzufragen und korrekt zu sortieren. Die meisten Datenbanken haben native Datetime-Typen, die dies gut handhaben. Reservieren Sie die Zeichenkettenformatierung für die Anzeige und API-Antworten.
Ein Unix-Zeitstempel (auch Epoch-Zeit genannt) ist die Anzahl der Sekunden seit 00:00:00 UTC am 1. Januar 1970, ohne Schaltsekunden. Es ist eine einzelne Ganzzahl, die jeden Zeitpunkt eindeutig identifiziert, unabhängig von der Zeitzone.
Traditionelle Unix-Zeitstempel zählen ganze Sekunden. Moderne Sprachen und APIs (JavaScript Date.now(), Java System.currentTimeMillis()) verwenden Millisekunden — 1000× größer — für Sub-Sekunden-Präzision. Prüfen Sie beim Interoperieren immer die Größenordnung: 10-stellige Zahl sind Sekunden, 13-stellige Zahl sind Millisekunden.
32-Bit-Ganzzahlen mit Vorzeichen können Zeitstempel bis zu 2.147.483.647 darstellen, was 03:14:07 UTC am 19. Januar 2038 entspricht. Danach werden 32-Bit-Systeme zu negativen Werten überlaufen. 64-Bit-Systeme können Daten weit über das Jahr 292 Milliarden hinaus sicher darstellen.
In JavaScript: new Date(ts * 1000).toISOString(). In Python: datetime.fromtimestamp(ts, tz=timezone.utc).isoformat(). In SQL (PostgreSQL): to_timestamp(ts). Das ISO 8601-Format ist YYYY-MM-DDTHH:MM:SSZ für UTC, z.B. 2024-01-15T12:30:00Z.