Unix-Zeitstempel erklärt: Konvertierung zwischen Formaten
Unix-Zeitstempel sind eines der grundlegendsten Konzepte in der Informatik, doch viele Entwickler und Datenexperten sind immer noch verwirrt davon. Ob Sie API-Antworten debuggen, Logdateien analysieren oder Scheduling-Systeme aufbauen – das Verständnis, wie Unix-Zeitstempel funktionieren und wie man zwischen Formaten konvertiert, ist eine unverzichtbare Fähigkeit.
Was ist ein Unix-Zeitstempel?
Ein Unix-Zeitstempel, auch als Epochenzeit oder POSIX-Zeit bekannt, ist die Anzahl der Sekunden, die seit dem 1. Januar 1970, 00:00:00 UTC vergangen sind (ohne Schaltsekunden). Dieser Referenzpunkt wird als Unix-Epoche bezeichnet. Zeitstempel werden als einzelne Ganzzahl gespeichert, was Vergleiche, Sortierung und die Berechnung von Zeitdifferenzen vereinfacht.
Zum Beispiel entspricht der Unix-Zeitstempel 1700000000 dem 14. November 2023, 22:13:20 UTC. Die Einfachheit, Zeit als einzelne Zahl darzustellen, macht Unix-Zeitstempel zum Standard für die Zeitdarstellung in Betriebssystemen, Datenbanken und Programmiersprachen.
Warum Unix-Zeitstempel verwenden
- Universell und eindeutig: Zeitstempel verwenden immer UTC und beseitigen Verwirrung durch Zeitzonen und Sommerzeitumstellungen.
- Einfach zu vergleichen: Der Vergleich zweier Zeitstempel ist ein einfacher Ganzzahlvergleich, der es einfach macht, festzustellen, welches Ereignis zuerst eintrat, oder Zeitdifferenzen zu berechnen.
- Kompakte Speicherung: Eine einzelne 32-Bit- oder 64-Bit-Ganzzahl benötigt weit weniger Platz als ein formatierter Datumsstring.
- Sprachunabhängig: Jede Programmiersprache und jedes Datenbanksystem kann Unix-Zeitstempel nativ verarbeiten.
- Arithmetische Operationen: Das Addieren und Subtrahieren von Zeit ist so einfach wie das Addieren und Subtrahieren von Sekunden von einem Ganzzahlwert.
Gängige Zeitstempelformate
Verschiedene Systeme verwenden unterschiedliche Zeitstempelformate. Das Verständnis dieser Unterschiede hilft Ihnen, präzise zwischen ihnen zu konvertieren.
| Format | Beispiel | Verwendet von |
|---|---|---|
| Unix-Sekunden | 1700000000 | Linux, APIs, Datenbanken |
| Unix-Millisekunden | 1700000000000 | JavaScript, Java |
| Unix-Mikrosekunden | 1700000000000000 | Python, Go |
| ISO 8601 | 2023-11-14T22:13:20Z | REST API, JSON |
| RFC 2822 | Tue, 14 Nov 2023 22:13:20 +0000 | E-Mail-Header, HTTP |
Unix-Zeitstempel in lesbare Daten umwandeln
In JavaScript
JavaScript stellt Zeitstempel in Millisekunden dar. Um einen Unix-Zeitstempel in Sekunden in ein JavaScript-Date-Objekt umzuwandeln, multiplizieren Sie ihn zuerst mit 1000. Verwenden Sie dann Methoden wie toLocaleString() oder toISOString() zur Formatierung der Ausgabe.
In Python
Das datetime-Modul von Python bietet die Methode fromtimestamp(), um Unix-Zeitstempel in datetime-Objekte umzuwandeln. Python unterstützt auch Zeitstempel mit Mikrosekunden-Genauigkeit über datetime.fromtimestamp(ts, tz=timezone.utc).
In der Befehlszeile
Unter Linux und macOS kann der date-Befehl Zeitstempel konvertieren. Verwenden Sie date -d @1700000000 unter Linux oder date -r 1700000000 unter macOS, um ein lesbares Datum aus einem Unix-Zeitstempel zu erhalten.
Mit Online-Tools
Der schnellste Weg, Zeitstempel zu konvertieren, ist die Verwendung eines Online-Konverters. Fügen Sie Ihren Zeitstempel ein, und das Tool zeigt sofort das entsprechende Datum und die Uhrzeit in mehreren Formaten an. Probieren Sie unseren kostenlosen Zeitstempel-Konverter für schnelle Umwandlungen.
Daten in Unix-Zeitstempel umwandeln
Die umgekehrte Konvertierung – ein lesbares Datum in einen Unix-Zeitstempel umzuwandeln – ist ebenso wichtig. Dies wird häufig benötigt, wenn Daten an APIs gesendet, vom Benutzer ausgewählte Daten gespeichert oder zukünftige Ereignisse geplant werden.
Erstellen Sie in JavaScript ein Date-Objekt und rufen Sie getTime() auf, um den Zeitstempel in Millisekunden zu erhalten, und teilen Sie dann durch 1000, um Sekunden zu erhalten. Verwenden Sie in Python datetime.timestamp(), um direkt einen Unix-Zeitstempel zu erhalten. Die meisten Programmiersprachen bieten ähnliche integrierte Methoden.
Das Jahr-2038-Problem
Systeme, die Unix-Zeitstempel als 32-Bit-Ganzzahlen mit Vorzeichen speichern, werden am 19. Januar 2038 um 03:14:07 UTC überlaufen. Zu diesem Zeitpunkt erreicht der Zeitstempel 2.147.483.647, den Maximalwert einer 32-Bit-Ganzzahl mit Vorzeichen, und springt dann auf negative Werte um, wodurch Daten als 1901 angezeigt werden.
Dieses Problem, bekannt als Jahr-2038-Problem oder Y2K38, betrifft ältere Systeme und eingebettete Geräte. Die Lösung besteht darin, Zeitstempel als 64-Bit-Ganzzahlen zu speichern, was den darstellbaren Bereich auf etwa 292 Milliarden Jahre erweitert. Die meisten modernen Betriebssysteme, Datenbanken und Programmiersprachen sind bereits auf 64-Bit-Zeitstempel umgestiegen.
Umgang mit Zeitzonen
Unix-Zeitstempel verwenden immer UTC, wodurch Zeitzonen-Mehrdeutigkeiten beseitigt werden. Die Anzeige von Zeitstempeln für Benutzer erfordert jedoch die Umrechnung in deren lokale Zeitzone. Hier sind die wichtigsten Überlegungen:
- Speichern Sie Zeitstempel in der Datenbank in UTC und konvertieren Sie sie nur bei der Anzeige für Benutzer in die lokale Zeit
- Verwenden Sie IANA-Zeitzonendatenbank-Bezeichner (wie "Europe/Berlin") anstelle von Abkürzungen (wie "MESZ"), um die Sommerzeit korrekt zu behandeln
- Geben Sie in API-Antworten immer Zeitzoneninformationen an, vorzugsweise im ISO-8601-Format mit UTC-Offset
- Beachten Sie, dass einige Regionen keine Sommerzeit verwenden und sich die Regeln häufig ändern
Häufige Fallstricke
- Verwechslung von Sekunden und Millisekunden bei der Arbeit zwischen JavaScript und anderen Sprachen
- Vergessen, die Zeitzone bei der Anzeige von Zeitstempeln zu berücksichtigen
- Verwendung von 32-Bit-Ganzzahlen zur Speicherung von Zeitstempeln auf Systemen, die sich der 2038-Grenze nähern
- Keine Behandlung negativer Zeitstempel für Daten vor dem 1. Januar 1970
- Annahme, dass alle Tage 86.400 Sekunden haben, bei Datumsarithmetik über Sommerzeitgrenzen hinweg
Müssen Sie zwischen Unix-Zeitstempeln und lesbaren Daten konvertieren? Probieren Sie unseren kostenlosen Zeitstempel-Konverter.
Zeitstempel-Konverter ausprobierenHäufig gestellte Fragen
Was ist die Unix-Epoche?
Die Unix-Epoche ist der 1. Januar 1970, 00:00:00 UTC. Sie dient als Referenzpunkt für alle Unix-Zeitstempelberechnungen. Ein Zeitstempel repräsentiert die Anzahl der seit diesem Zeitpunkt vergangenen Sekunden.
Werden Unix-Zeitstempel irgendwann aufgebraucht sein?
Unix-Zeitstempel als 32-Bit-Ganzzahlen mit Vorzeichen werden am 19. Januar 2038 überlaufen, was als Jahr-2038-Problem bekannt ist. Systeme, die 64-Bit-Ganzzahlen verwenden, werden dieses Problem für etwa 292 Milliarden Jahre nicht haben. Die meisten modernen Systeme sind bereits auf 64-Bit-Zeitstempel umgestiegen.
Werden Unix-Zeitstempel von Zeitzonen beeinflusst?
Nein, Unix-Zeitstempel verwenden immer UTC und werden nicht von Zeitzonen beeinflusst. Derselbe Zeitstempel repräsentiert weltweit denselben Zeitpunkt. Zeitzonenumrechnungen finden nur statt, wenn Zeitstempel als lesbare Daten angezeigt werden.
Was ist der Unterschied zwischen Sekunden und Millisekunden bei Zeitstempeln?
Standard-Unix-Zeitstempel messen die Zeit seit der Epoche in Sekunden, während JavaScript und einige APIs Millisekunden verwenden. Ein Millisekunden-Zeitstempel ist das 1000-fache des Sekunden-Zeitstempels. Zum Beispiel entsprechen 1.700.000.000 Sekunden 1.700.000.000.000 Millisekunden.
Beeinflussen Schaltsekunden Unix-Zeitstempel?
Technisch gesehen ignorieren Unix-Zeitstempel Schaltsekunden. Jeder Tag wird so behandelt, als hätte er genau 86.400 Sekunden. Das bedeutet, dass die Unix-Zeit bei Einfügung von Schaltsekunden leicht von UTC abweichen kann, aber in der Praxis verursacht dies selten Probleme.