Alapfogalom és definíció
A Unix idő (vagy Epoch time, POSIX time) az eltelt egész másodpercek száma 1970-01-01 00:00:00 UTC óta. A definíció gyakorlati sajátossága, hogy szökőmásodperceket nem számol, ezért a valós UTC skálától legfeljebb néhány másodperccel eltérhet. A fejlesztésben ez előny: a timestamp monoton, összehasonlítható és könnyen tárolható.
Időábrázolás és pontosság
Másodperc és nanoszekundum
A klasszikus time_t egész másodpercet tárol. Sok rendszer a timespec vagy a chrono típusokkal nanoszekundumos felbontást ad, miközben az epoch továbbra is 1970-01-01.
Időzóna és megjelenítés
Tárolásnál UTC ajánlott, megjelenítésnél konvertálj IANA zónára. Például Europe/Budapest (CET/CEST) vagy Europe/London (tél: GMT, nyár: BST). A zónaszabályokat lásd: IANA időzónák.
2038-as probléma és megoldások
A 32 bites, előjeles time_t maximuma 2 147 483 647, ami 2038-01-19 03:14:08 UTC-nek felel meg. Ezt követően túlcsordulás történik. A modern rendszerek 64 bites time_t-re álltak át, amely gyakorlatilag a belátható jövőre megoldja a kérdést. Legacy környezetben auditáld az időfüggő mezőket, API-kat és fájlformátumokat.
Konverziók és példák
Unix → ISO 8601 (UTC)
<?php
$ts = 1759305600;
echo (new DateTime("@$ts"))->setTimezone(new DateTimeZone('UTC'))->format('Y-m-d\TH:i:s\Z');
ISO 8601 (UTC) → Unix
<?php
$d = new DateTime('2025-10-01T00:00:00Z', new DateTimeZone('UTC'));
echo $d->getTimestamp();
JavaScript megjelenítés Europe/Budapest szerint
const ts = 1759305600;
const d = new Date(ts * 1000);
const fmt = new Intl.DateTimeFormat('hu-HU',{timeZone:'Europe/Budapest',year:'numeric',month:'2-digit',day:'2-digit',hour:'2-digit',minute:'2-digit',second:'2-digit'});
console.log(fmt.format(d));
Bevált gyakorlatok
- Tárolás UTC-ben, megjelenítés IANA zónában.
- Backend–frontend között ISO 8601 ajánlott (
YYYY-MM-DDTHH:mm:ssZ) vagy Unix timestamp, de dokumentáld az egységet. - Időintervallumoknál mindig zóna-tudatos könyvtárat használj; ne kézi
±3600feltételezéssel számolj átállásoknál. - NTP-vel szinkronizált rendszert használj (NTP, GPS), és monitorozd az eltérést.
- Készülj fel a szökőmásodpercek kezelésére: OS/NTP oldali megoldás, vagy leap smear.
GYIK
Miért 1970-01-01 az epoch?
Történeti és implementációs okokból a Unix rendszerek ezt a kezdőpontot választották; egységes és elterjedt ipari konvenció.
Negatív Unix idő létezik?
Igen, az 1970 előtti dátumok negatív másodpercszámmal ábrázolhatók, bár nem minden rendszer támogatja egységesen.
Mikor gond a 2038-as hiba?
32 bites, előjeles time_t-t használó rendszereken és fájlformátumokban. Megoldás a 64 bites átállás és a teljes lánc auditja.
Kezeli a Unix idő a DST-t?
A Unix idő UTC-alapú számláló, a DST csak a zónára konvertáláskor számít.
Mi a különbség a POSIX idő és az UTC között szökőmásodperc idején?
A POSIX-idő nem illeszt be plusz másodpercet; az OS/NTP smearrel vagy lépéssel közelít. Az UTC hivatalosan tartalmazhat 23:59:60-at.
Kapcsolódó tartalmak
Összegzés
A Unix idő egyszerű, gyors és skálázható időábrázolás, ezért a modern rendszerek alapköve. Tárolj UTC-ben, konvertálj IANA zónára, készülj fel a 2038 utáni világra 64 bites time_t-tel, és hagyd a szinkront az NTP/GNSS infrastruktúrára.