Tools Blog

Mi az a Unix Epoch Time? Fejlesztői útmutató az időbélyegekhez

Unix Epoch Timestamp Explained

Ha valaha is lekérdezett egy adatbázist, vagy modern API-val dolgozott, valószínűleg nem „2026. október 12-eként” adták vissza a dátumokat, hanem egy hatalmas, félelmetes számsorként, mint például a 1791800000. Ez egy Unix időbélyeg, és ez a számítástechnika időmérésének univerzális gerince.

A dátumok és időpontok kezelése a programozásban köztudottan nehéz. Változnak az időzónák, a nyári időszámítás kiszámíthatatlanul kezdődik és leáll, a szökőévek pedig plusz napokat vezetnek be. Ennek a kaotikus valóságnak a megoldására a Unix operációs rendszert építő mérnökök úgy döntöttek, hogy feltalálják saját abszolút idővonalukat.

🎥 Oktatóvideó: Az Y2K38 probléma és a korszak ideje (Helyőrző a beágyazott YouTube koncepcionális oktatóanyaghoz)

Eredet: 1970. január 1

A Unix időbélyeg egyszerűen az 1970. január 1. 00:00:00 UTC óta eltelt másodpercek száma. A történelemnek pontosan ezt a pillanatát „Unix-korszaknak” nevezik.

Miért 1970? Mert az 1970-es évek elején a tárolás hihetetlenül drága volt. Egy dátum ember által olvasható karakterláncként való tárolása, például „1970-01-01 00:00:00”, közel 20 bájt memóriát foglal el. Egyetlen 32 bites egész számként való tárolása mindössze 4 bájtot vett igénybe. Azáltal, hogy a kiindulási pontot a Unix feltalálásának idejéhez közelítették, maximalizálták a jövőben tárolható időt ezen a 4 bájton belül.

Miért szeretik a fejlesztők a Unix időbélyegeket?

The primary reason Unix time is universally adopted across APIs, databases, and microservices is that it has no timezone. Egyetlen, abszolút időpillanatot képvisel globálisan.

Ha elment egy eseményt egy adatbázisba a helyi szerveridővel ("03:00 PM EST"), majd később áttelepíti a szervert Londonba, akkor az összes matematikai művelet megszakad. De ha egy esemény a 1700000000 időbélyeggel történik, akkor ez a szám azonos, függetlenül attól, hogy a lekérdező felhasználó Tokióban, New Yorkban vagy Párizsban tartózkodik. A frontend alkalmazás egyszerűen veszi ezt az egész számot, és matematikailag konvertálja a felhasználó helyi időzónájára a képernyőn.

Konvertálja az időbélyegeket azonnal

Ne próbálja meg gondolatban kiszámítani a másodperceket. Offline eszközünk segítségével azonnal lefordíthatja a 10 vagy 13 számjegyű időbélyegeket ember által olvasható dátumokra a helyi időzónájában.

Nyissa meg az Időbélyeg-konvertert

Másodperc vs ezredmásodperc (a 10 vs 13 számjegy szabály)

A webfejlesztés egyik leggyakoribb hibája az időbélyeg átadása egy függvénynek, és dátum megadása 1970-ben vagy 52 000-ben. Ennek oka a másodpercek és ezredmásodpercek keveredése.

  • Normál Unix idő (másodpercben): 10 jegyű szám (pl. 1700000000). Ez a szabvány a Linuxban, a PHP-ben és a legtöbb háttéradatbázisban, például a MySQL-ben.
  • JavaScript idő (ezredmásodperc): 13 jegyű szám (pl. 1700000000000). A JavaScript Date.now() függvénye ezredmásodperceket tartalmaz a nagyobb pontosság érdekében.

Ha 10 számjegyű háttéridőbélyeget ad be a JavaScriptbe anélkül, hogy megszorozná 1000-rel, a JavaScript feltételezi, hogy 1970 januárjának első néhány napjáról beszélünk.

// Correctly handling a Unix timestamp in JavaScript
const backendTimestamp = 1700000000;
const dateObject = new Date(backendTimestamp * 1000);

console.log(dateObject.toLocaleDateString()); // Converts to local user timezone

A 2038-as év probléma (Y2K38)

A Unix időnek közeleg a határideje. Mivel eredetileg előjeles 32 bites egész számként tárolták, a benne tárolható maximális szám 2 147 483 647.

2038. január 19-én, 03:14:07 UTC-kor a Unix órája eléri ezt a maximális számot. Egy másodperccel később az egész szám túlcsordul, és negatív számra vált. Legacy systems that haven't been upgraded to 64-bit architecture will suddenly believe the year is 1901, causing catastrophic failures in software worldwide.

Szerencsére szinte az összes modern hardver, adatbázis és programozási nyelv (például a 64 bites Linux kernelek és a modern Node.js) már átállt a 64 bites időre, ami a következő túlcsordulást több milliárd évre tolja a jövőbe.

Gyakran Ismételt Kérdések (GYIK)

A Unix idő szökőmásodperceket számol?

Meglepő módon nem. A Unix idő azt feltételezi, hogy minden nap pontosan 86 400 másodpercből áll. Amikor a világ hozzáad egy "ugrómásodpercet", hogy alkalmazkodjon a Föld forgásához, a Unix rendszerek általában csak kétszer ismétlik meg ugyanazt az időbélyeget, hogy szinkronban maradjanak anélkül, hogy a matematikai számításokat megzavarnák.

Lehet-e negatív a Unix időbélyeg?

Igen. Bármely 0-nál kisebb időbélyeg a Unix-korszak előtti dátumot jelöli (1970. január 1.). Például a -86400 pontosan 1969. december 31-ét jelenti.

Miért jelenik meg az átváltott dátumom mindig 1970-ben?

Valószínűleg 10 számjegyű időbélyeget ad át egy olyan függvénynek, amely 13 számjegyet (ezredmásodpercet) vár. Az átalakítás előtt szorozza meg az időbélyeget 1000-rel.