Guide
Arbeiten mit UTC-Zeitstempeln – Vollständige Anleitung
Einführung
UTC (koordinierte Weltzeit) ist die Standardzeitreferenz, die in Computern und Netzwerken verwendet wird. Für die Entwicklung von Anwendungen, die über mehrere Zeitzonen hinweg funktionieren und genaue Zeitberechnungen erfordern, ist es wichtig zu verstehen, wie man mit UTC-Zeitstempeln arbeitet.
UTC verstehen
Was ist UTC-Zeit?
UTC ist ein Zeitstandard, der:
- Hat keinen Zeitzonenversatz (keine Sommerzeit)
- Verwendet ein 24-Stunden-Uhrformat (00:00:00 bis 23:59:59,999)
– Wird in ISO 8601 als „Z“ dargestellt (z. B.
2025-01-07T12:00:00.000Z) - Dient als Grundlage für alle anderen Zeitzonen
UTC vs. Ortszeit
Entscheidendes Konzept: Die Ortszeit variiert je nach geografischem Standort und Zeitzone. UTC ist weltweit konstant.
| Charakteristisch | UTC-Zeit | Ortszeit |
|---|---|---|
| Zeitzonenversatz | Immer UTC+00:00 | Variiert je nach Standort (z. B. UTC-5, UTC+8, UTC-10) |
| Sommerzeit | Keine DST-Anpassungen | Variiert je nach Saison und Region |
| Konsistenz | Global konsistent | Unterschiedliche Systeme können unterschiedliche Ortszeiten haben |
| Primärer Anwendungsfall | Globale Systeme, Datenbanken, APIs | Benutzerorientierte Anwendungen, Kalenderereignisse |
| Speichergröße | Wie jeder Zeitstempel (kein zusätzlicher Overhead) | Identisch mit DateTime (größerer Speicher) |
| Abfrageleistung | Ausgezeichnet (numerische Vergleiche) | Langsam (erfordert Datum/Uhrzeit-Analyse) |
Warnung: Speichern Sie immer UTC-Zeitstempel in Ihrer Datenbank. Konvertieren Sie die Uhrzeit nur zu Anzeigezwecken in die Ortszeit.
UTC-Zeitstempelformat
ISO 8601
UTC-Zeitstempel in ISO 8601 enden immer mit „Z“:
2025-01-07T12:00:00.000Z // January 7, 2025, 12:00:00 UTC
Unix-Zeitstempel
UTC-Zeitstempel sind die Anzahl der Sekunden seit der Unix-Epoche (1970-01-01 00:00:00 UTC):
1735689600 // January 1, 2025, 00:00:00 UTC
Konvertieren von UTC in Ortszeit
JavaScript
// Convert UTC timestamp (seconds) to local time
function utcToLocal(utcTimestampSeconds, timezoneOffsetHours = 0) {
const date = new Date(
(utcTimestampSeconds * 1000) + (timezoneOffsetHours * 60 * 60 * 1000),
);
return date.toLocaleString(); // Returns string like "1/7/2025, 6:12:00 PM"
}
// Get UTC timestamp and convert to local
const now = Math.floor(Date.now() / 1000);
console.log(utcToLocal(now, -5)); // UTC-5 for EST
Python
from datetime import datetime, timezone
from zoneinfo import ZoneInfo
# Convert UTC to specific timezone
def utc_to_local(utc_timestamp: int, timezone_str: str) -> datetime:
"""
Convert UTC timestamp to local datetime in specified timezone.
Args:
utc_timestamp: Unix timestamp in seconds
timezone_str: IANA timezone name (e.g., 'America/New_York')
Returns:
Local datetime object
"""
utc_time = datetime.fromtimestamp(utc_timestamp, tz=timezone.utc)
return utc_time.astimezone(ZoneInfo(timezone_str))
# Example
print(utc_to_local(1735689600, "America/Los_Angeles"))
SQL
-- MySQL: Convert UTC timestamp to datetime
-- Note: Use FROM_UNIXTIME() which respects the system timezone setting
-- Convert UTC timestamp to MySQL DATETIME
SELECT
id,
FROM_UNIXTIME(created_at) AS mysql_datetime,
created_at
FROM events
WHERE id = ?;
-- Store current UTC timestamp
UPDATE events
SET created_at = UNIX_TIMESTAMP(NOW());
-- PostgreSQL: Use TIMESTAMPTZ for timezone-aware storage
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
event_timestamp TIMESTAMPTZ NOT NULL DEFAULT NOW(),
event_date TIMESTAMP WITH TIME ZONE 'UTC'
);
-- Query events with local time display
SELECT
id,
event_timestamp,
TO_CHAR(event_timestamp, 'YYYY-MM-DD HH24:MI:SS') AS local_time
FROM events;
Best Practice: Speichern Sie immer UTC-Zeitstempel. Verwenden Sie die Zeitzonenkonvertierung auf Anwendungsebene nur für die Anzeige.
Zeitzonenbehandlung
Zeitzonenversätze verstehen
Zeitzonenversätze werden wie folgt ausgedrückt:
- UTC+XX:00 (z. B. UTC-5:00)
- UTC-XX:00 (z. B. UTC+8:00)
| Versatz | Stunden | Stadt | Region |
|---|---|---|---|
| UTC-5:00 | -5 | New York, Toronto, Bogota, Lima | Eastern Standard Time |
| UTC-8:00 | -8 | Los Angeles, San Francisco, Tijuana | Pazifische Standardzeit |
| UTC+0:00 | 0 | London, Dublin, Lissabon | Westeuropäische Zeit |
| UTC+1:00 | +1 | Paris, Berlin, Rom | Mitteleuropäische Zeit |
| UTC+8:00 | +8 | Singapur, Hongkong, Perth | Chinesische Standardzeit |
| UTC+9:00 | +9 | Tokio, Seoul, Pjöngjang | Japanische Standardzeit |
| UTC+10:00 | +10 | Sydney, Melbourne, Brisbane | Australische Oststandardzeit |
| UTC+12:00 | +12 | Auckland | Neuseeländische Standardzeit |
Beispiele für die Zeitzonenkonvertierung
JavaScript-Zeitzonenkonvertierungen
// Convert between UTC and different timezones
function convertToTimezone(utcDate, timezone) {
const options = { timeZone: timezone };
return utcDate.toLocaleString('en-US', options);
}
// Examples
const utcDate = new Date('2025-01-07T12:00:00.000Z');
console.log(convertToTimezone(utcDate, 'America/New_York')); // "1/7/2025, 7:00:00 AM EST"
console.log(convertToTimezone(utcDate, 'Asia/Tokyo')); // "2025/1/7, 21:00:00 JST"
console.log(convertToTimeDate, 'Europe/London')); // "1/7/2025, 12:00:00 GMT"
console.log(convertToTimezone(utcDate, 'Asia/Shanghai')); // "2025/1/7, 20:00:00 CST"
// Python timezone handling
from datetime import datetime, timezone
# Get current UTC time and convert to timezone
now_utc = datetime.now(timezone.utc)
# Convert to specific timezone
now_tokyo = now_utc.astimezone('Asia/Tokyo')
now_est = now_utc.astimezone('America/New_York')
now_gmt = now_utc.astimezone('Etc/GMT')
print(f"UTC: {now_utc}")
print(f"Tokyo: {now_tokyo}")
print(f"EST: {now_est}")
print(f"GMT: {now_gmt}")
Best Practices
UTC-Speicherrichtlinien
Speicher: Speichern Sie immer UTC-Zeitstempel. Sie sind zeitzonenunabhängig und effizient für globale Anwendungen.
Anzeige: Nur auf der UI-Ebene in die lokale Zeitzone konvertieren. Speichern Sie niemals Ortszeiten zurück in der Datenbank.
Abfragen: Filtern und sortieren Sie immer nach UTC-Zeitstempeln. Dies gewährleistet eine konsistente Reihenfolge unabhängig von der Zeitzone des Benutzers.
APIs: Verwenden Sie in API-Antworten immer UTC-Zeitstempel. Dokumentieren Sie die Zeitzone in der API-Dokumentation.
Kritische Warnung: Mischen Sie niemals UTC-Zeitstempel mit lokalen Zeitstempeln in derselben Spalte. Dies führt zu Datenintegritätsproblemen und Abfrageinkonsistenzen.
Häufige Fallstricke
Falle 1: Zeitzonen vergessen
Problem: Nicht alle Standorte beachten die Sommerzeit gleichzeitig.
Beispiel: In Arizona gibt es keine Sommerzeit, in New York jedoch schon. Dies kann in bestimmten Zeiträumen zu Abweichungen von einer Stunde führen.
Lösung: Verwenden Sie IANA-Zeitzonendatenbanken (TZ-Datenbank), die historische und aktuelle Sommerzeitregeln enthalten.
Fallstrick 2: Falsche Zeitzonenversätze
Problem: Verwendung fest codierter Offsets anstelle von Zeitzonennamen.
Schlecht:
const offset = -5 * 3600000;// EST ist immer -5, aber Arizona beachtet die Sommerzeit nicht
Gut:
const offset = 'America/New_York';// Verwendet die IANA-Datenbank mit korrekter historischer Sommerzeit
Fallstrick 3: Angenommen, alle Zeiten haben das gleiche Format
Problem: Nicht alle Systeme verwenden UTC (z. B. verwenden einige GMT, andere UTC+X).
Beispiel: Unix-Zeitstempel basieren immer auf UTC, Dateisysteme können jedoch variieren.
Lösung: Geben Sie beim Parsen von Benutzereingaben immer explizit die Zeitzone an.
Arbeiten mit verschiedenen Zeitzonen
JavaScript
// Best practice: Always specify timezone when creating dates
const date1 = new Date('2025-01-07T12:00:00'); // UTC time (good)
const date2 = new Date('2025-01-07T12:00:00-08:00'); // Bad: assumes local timezone
// Convert between timezones
function convertTimezones(fromDate, fromTz, toTz) {
return {
fromTime: fromDate.toLocaleString('en-US', { timeZone: fromTz }),
toTime: fromDate.toLocaleString('en-US', { timeZone: toTz }),
fromTimestamp: fromDate.getTime(),
toTimestamp: fromDate.toLocaleString('en-US', { timeZone: toTz }),
};
}
// Example: Convert UTC to multiple timezones
const utcDate = new Date('2025-01-07T12:00:00.000Z');
const conversions = [
convertTimezones(utcDate, 'UTC', 'America/New_York'),
convertTimezones(utcDate, 'UTC', 'Asia/Tokyo'),
convertTimezones(utcDate, 'UTC', 'Europe/London'),
];
Python
from datetime import datetime, timezone
# Best practice: Use pytz library
import pytz
def convert_to_timezone(utc_time: datetime, timezone: str) -> datetime:
"""
Convert UTC datetime to specified timezone using IANA timezone database.
Args:
utc_time: UTC datetime object
timezone_str: IANA timezone name
Returns:
Localized datetime object
"""
utc_time = utc_time.replace(tzinfo=timezone.tzinfo(utc_time))
return utc_time.astimezone(timezone)
# Example: Convert current UTC to multiple timezones
now_utc = datetime.now(timezone.utc)
now_est = now_utc.astimezone('America/New_York')
now_gmt = now_utc.astimezone('Etc/GMT')
now_tokyo = now_utc.astimezone('Asia/Tokyo')
print(f"UTC: {now_utc}")
print(f"EST: {now_est}")
print(f"GMT: {now_gmt}")
print(f"JST: {now_tokyo}")
Best Practices für Zeitzonen
Richtlinien zur Zeitzonenauswahl
<ol> <li>Verwenden Sie immer IANA-Zeitzonennamen (z. B. „Amerika/New_York“, „Europa/London“)</li> <li>Verwenden Sie Zeitzonendatenbanken (IANA tz-Datenbank, tz-Datenbank) anstelle von fest codierten Offsets</li> <li>Testen Sie die Sommerzeitübergänge in Ihren Zielregionen (insbesondere Frühling und Herbst)</li> <li>Dokumentieren Sie Ihre Zeitzonenannahmen klar in der API-Dokumentation</li> <li>Erwägen Sie die Verwendung von UTC für alle internen Speicher und Berechnungen</li> <li>Zeitzonennamen und Ortszeiten separat in der Benutzeroberfläche anzeigen (UTC intern speichern)</li> </ol>Tools und Referenzen
Verwandte Tools
- UTC/Local Converter – Konvertieren zwischen UTC und Ortszeit
- Zeitzonenbrowser – Durchsuchen Sie die IANA-Zeitzonendatenbank
- Aktueller Zeitstempel – Aktuellen UTC-Zeitstempel abrufen
- Unix Timestamp Converter – Konvertieren zwischen Formaten
- Timestamp Validator – Zeitstempelformate validieren
- Timestamp Format Converter – Multiformat-Konvertierungszentrum
Zusammenfassung
Wichtiges zum Mitnehmen: Speichern Sie immer UTC-Zeitstempel. Behandeln Sie die Zeitzonenkonvertierung auf der Anwendungs- oder Abfrageebene. Dies stellt die Datenkonsistenz sicher und macht Ihre Anwendung global kompatibel.
Kritisch: Mischen Sie niemals UTC- und lokale Zeitstempel im Datenbankspeicher. Speichern Sie immer UTC und konvertieren Sie es nur bei Bedarf in lokal.
Leistungstipp: UTC-Zeitstempel sind ideal für:
- Datenbankindizierung (numerische Vergleiche)
- Bereichsabfragen (numerische Filter)
- Sortieroperationen (numerische Reihenfolge)
- Zeitbasierte Partitionierung
Codebeispiel-Repository
Weitere Beispiele für Zeitstempel- und Zeitzonencodes finden Sie in unseren zugehörigen Tools und Anleitungen für die Arbeit mit bestimmten Anwendungsfällen:
- Timestamp Format Converter – Formatkonvertierungen mit Codegenerierung – Unix Timestamp Converter – Bidirektionale Konvertierungen – UTC/Local Converter – Zeitzonenspezifische Konvertierungen