Was ist Epoch oder Unix-Zeitstempel?
Der Unix-Zeitstempel, auch bekannt als Epoch-Zeit oder POSIX-Zeit, ist ein System zur Beschreibung eines Zeitpunkts als die Anzahl der Sekunden, die seit der Unix-Epoche (1. Januar 1970, 00:00:00 UTC) vergangen sind, ohne Schaltsekunden. Es dient als universeller Standard für die Zeitdarstellung in der Informatik und ermöglicht präzise zeitbasierte Berechnungen, Vergleiche und Synchronisation über Systeme und Anwendungen hinweg.
Unix-Zeitstempel werden weitläufig in Datenbanken, Protokollierungssystemen, APIs und verteilten Systemen verwendet, um Ereignisse zu verfolgen, Aufgaben zu planen und zeitkritische Operationen zu verwalten. Allerdings stellt die Unix-Zeit aufgrund des Ausschlusses von Schaltsekunden keine echte Darstellung der UTC dar. Viele ältere Systeme speichern die Unix-Zeit als vorzeichenbehaftete 32-Bit-Ganzzahl, die am 19. Januar 2038 um 03:14:08 UTC überlaufen wird, was zum Jahr-2038-Problem führt.
Was passiert am 19. Januar 2038?
Das Jahr-2038-Problem (Y2038, Epochalypse oder Unix Y2K) ist ein kritisches Problem für Systeme, die eine vorzeichenbehaftete 32-Bit-Ganzzahl zur Speicherung der Unix-Zeit verwenden. Diese Systeme können Zeiten nach dem 19. Januar 2038 um 03:14:07 UTC nicht darstellen, da der Maximalwert (2.147.483.647 Sekunden) überschritten wird. Bei einer Erhöhung wird der Zeitstempel überlaufen, zu einer negativen Zahl wechseln und dazu führen, dass Systeme ihn fälschlicherweise als den 13. Dezember 1901 interpretieren.
Dieser Ganzzahlüberlauf kann kritische Systeme in Bereichen wie Finanztransaktionen, Luftfahrt, Gesundheitswesen und Infrastruktur stören, in denen eine genaue Zeitmessung unerlässlich ist. Um dies zu mildern, wechseln moderne Systeme zu 64-Bit-Ganzzahlen, die Zeit für Milliarden von Jahren in die Zukunft darstellen können. Entwickler werden außerdem ermutigt, ältere Systeme zu aktualisieren und robuste Zeitverarbeitungsbibliotheken zu verwenden, um Y2038-bedingte Ausfälle zu verhindern.
Wie erhält man die aktuelle Epoch-Zeit in verschiedenen Programmiersprachen?
PHP
$epoch = time();
Javascript
var epoch = Math.floor(Date.now() / 1000);
Typescript
let epoch: number = Math.floor(Date.now() / 1000);
C++
#include <chrono>
auto epoch = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
Java
long epoch = System.currentTimeMillis() / 1000;
Rust
use std::time::{SystemTime, UNIX_EPOCH};
let epoch = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs();
Go
import "time"
epoch := time.Now().Unix()
Swift
import Foundation
let epoch = Int(Date().timeIntervalSince1970)
Bash Shell
epoch=$(date +%s)
C#
long epoch = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
MySQL
SELECT UNIX_TIMESTAMP(NOW());
MATLAB
epoch = posixtime(datetime('now'));
VBA
Dim epoch As Long
epoch = DateDiff("s", "1/1/1970", Now())