Unix idő (Epoch time)

Másodpercek 1970-01-01 00:00:00 UTC óta: a Unix idő a modern operációs rendszerek, adatbázisok és hálózati protokollok alapja. Gyors, egyértelmű és gépbarát – konverzióval bármely időzónába átültethető.

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 ±3600 felté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.