Unix laiko žymeklio konvertavimas į datą
Konvertuokite Unix laiko žymeklį į skaitomą datą ir laiką — arba bet kurią datą atgal į Unix laiko žymeklį. Palaiko sekundes ir milisekundes.
Dalintis šiuo įrankiu
Įterpti į savo svetainę
Susiję įrankiai
Kas yra Unix laiko žyma?
Unix laiko žyma (Unix timestamp), dar vadinama Unix laiku arba POSIX laiku, yra sekundžių skaičius, praėjęs nuo 1970-01-01 00:00:00 UTC, vadinamo Unix epocha. Tai plačiai naudojamas kompiuterijos standartas, nes jis atvaizduoja konkretų laiko momentą kaip vieną sveikąjį skaičių, todėl saugojimas, palyginimas ir aritmetika tampa paprasti.
JavaScript viduje naudoja milisekundes, todėl Date.now() grąžina Unix laiko žymą, padaugintą iš 1000. Daugelis API, duomenų bazių ir backend sistemų vietoje to naudoja sekundes. Šis įrankis priima abu formatus ir automatiškai aptinka sekundes arba milisekundes pagal įvedamo skaičiaus dydį.
Žymios Unix laiko žymos
| Laiko žyma | Data (UTC) | Pastaba |
|---|---|---|
0 | 1970-01-01 00:00:00 | Unix epocha |
1,000,000,000 | 2001-09-09 01:46:40 | 1 milijardas sekundžių |
2,000,000,000 | 2033-05-18 03:33:20 | 2 milijardai sekundžių |
2,147,483,647 | 2038-01-19 03:14:07 | 2038 metų problema (maks. 32 bitų) |
Kodėl 1970?
Unix epocha, prasidedanti 1970 m. sausio 1 d., buvo pasirinkta iš dalies dėl susitarimo, o iš dalies dėl praktinių apribojimų. Unix buvo kuriama 1960-ųjų pabaigoje ir 1970-ųjų pradžioje Bell Labs. Kūrėjams reikėjo palyginti naujos, „apvalios“ pradžios datos laiko atvaizdavimui. 1970 m. sausio 1 d. buvo pakankamai nesena, kad būtų praktiška, ir neturėjo ypatingos techninės reikšmės — tai tiesiog patogus atskaitos taškas.
Kitos sistemos turi kitokias epochas: Windows FILETIME epocha yra 1601 m. sausio 1 d.; GPS laikas prasidėjo 1980 m. sausio 6 d.; NTP epocha yra 1900 m. sausio 1 d. Konvertuojant tarp sistemų, būtina žinoti kiekvienos sistemos epochą.
Sekundės vs milisekundės
Originali Unix laiko žyma yra sekundėmis. Dauguma serverio pusės kalbų ir sistemų (Unix shell, Python time.time(), PHP time(), dauguma duomenų bazių) naudoja sekundes. JavaScript Date.now() ir new Date().getTime() grąžina milisekundes. Šis nesutapimas dažnai sukelia klaidas, kai JavaScript frontendas bendrauja su backend API.
Unix laiko žyma sekundėmis šiuo metu yra 10 skaitmenų skaičius (apie 1,700,000,000, kaip buvo 2023 m.). Milisekundžių laiko žyma yra 13 skaitmenų. Skaičiuotuvas nustato, kurį formatą įvedėte, pagal skaitmenų skaičių ir atitinkamai konvertuoja.
2038 metų problema
Sistemos, kurios Unix laiko žymas saugo kaip pasirašytą 32 bitų sveikąjį skaičių, gali atvaizduoti datas tik iki 2,147,483,647 sekundžių po epochos — tai yra 2038 m. sausio 19 d. 03:14:07 UTC. Po šio momento 32 bitų pasirašytas sveikasis skaičius persipildo į didelį neigiamą skaičių, atvaizduojantį datą 1901 m.
Tai kartais vadinama „Y2K38“ problema arba Unix tūkstantmečio klaida. Šiuolaikinės 64 bitų sistemos nėra paveiktos, nes pasirašytas 64 bitų sveikasis skaičius gali atvaizduoti laiko žymas maždaug 292 milijardus metų. Tačiau įterptosios sistemos, senos duomenų bazės ir senesnė 32 bitų programinė įranga vis dar gali būti pažeidžiamos. Daugelyje industrijų — įskaitant telekomunikacijas, bankininkystę ir pramonines valdymo sistemas — vyksta migracijos darbai, siekiant tai išspręsti.
Kaip gauti dabartinę Unix laiko žymą
| Kalba / aplinka | Komanda |
|---|---|
| JavaScript | Math.floor(Date.now() / 1000) |
| Python | import time; int(time.time()) |
| PHP | time() |
| Bash | date +%s |
| SQL (PostgreSQL) | EXTRACT(EPOCH FROM NOW())::int |
| SQL (MySQL) | UNIX_TIMESTAMP() |
| Go | time.Now().Unix() |
| Rust | SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs() |
Praktinės paskirtys
API kūrimas: REST API dažnai naudoja Unix laiko žymas created_at, updated_at ir žetonų galiojimo pabaigos laukams. Laiko žyma nepriklauso nuo laiko juostos ir yra vienareikšmė — priešingai nei formatuotos datos eilutės, kurios priklauso nuo lokalės ir formatavimo taisyklių.
Žetonų galiojimas: JWT (JSON Web Tokens) naudoja Unix laiko žymas exp (galiojimo pabaiga) ir iat (išdavimo laikas) claim'ams. Žetonas nustoja galioti, kai dabartinė laiko žyma viršija exp reikšmę. Skaičiuojant galiojimo pabaigą — pvz., „šis žetonas turi galioti 24 valandas“ — reikia prie dabartinės laiko žymos pridėti 86 400 sekundžių.
Talpyklos TTL: Talpyklos galiojimas dažnai nustatomas kaip Unix laiko žyma arba kaip sekundžių skaičius nuo dabar. Derinant talpyklos problemas dažnai pirmas žingsnis yra konvertuoti saugomą galiojimo laiko žymą į žmogui suprantamą datą.
Žurnalų analizė: Serverių žurnalai dažnai turi Unix laiko žymas. Paversti jas į skaitomas datas yra pirmas žingsnis siejant įrašus su realiais įvykiais.
Duomenų bazių saugojimas: Laiko žymų saugojimas kaip sveikųjų skaičių, o ne formatuotų eilučių padeda išvengti laiko juostų konvertavimo klaidų ir supaprastina rikiavimą, intervalų užklausas ir aritmetiką. Užklausa „visi įrašai per paskutines 7 dienas“ tampa WHERE created_at > (NOW_UNIX - 604800).
Dažniausiai užduodami klausimai
Kas yra Unix laiko žyma (Unix timestamp)?
Unix laiko žyma yra sekundžių skaičius, praėjęs nuo 1970 m. sausio 1 d. 00:00:00 UTC — atskaitos taško, vadinamo Unix epocha. Ji bet kurį laiko momentą pateikia kaip vieną sveikąjį skaičių, todėl ją lengva saugoti, lyginti ir atlikti aritmetinius veiksmus. Tai standartinis laiko formatas, naudojamas daugumoje operacinių sistemų, duomenų bazių, API ir programavimo kalbų.
Kaip konvertuoti Unix laiko žymą į datą?
Įveskite laiko žymą į konverterį ir jis grąžins atitinkamą datą bei laiką UTC ir jūsų vietinėje laiko juostoje. Įrankis automatiškai aptinka, ar įvedėte sekundes (10 skaitmenų skaičių), ar milisekundes (13 skaitmenų skaičių). Taip pat galite konvertuoti ir atvirkščiai: pasirinkite datą ir laiką, kad gautumėte atitinkamą Unix laiko žymą.
Kuo skiriasi Unix laikas sekundėmis ir milisekundėmis?
Pirminė Unix laiko žyma yra sekundėmis. Dauguma serverio pusės sistemų — PHP, Python, Go, Bash, SQL duomenų bazės — naudoja sekundes. JavaScript funkcijos Date.now() ir new Date().getTime() grąžina milisekundes (Unix sekundės × 1000). Sekundžių laiko žyma šiuo metu yra 10 skaitmenų, o milisekundžių — 13 skaitmenų. Supainioti šiuos formatus yra dažna klaida, kai JavaScript frontend’as siunčia laiko žymą į backend’ą, kuris tikisi sekundžių.
Kodėl Unix laikas prasideda 1970 m. sausio 1 d.?
Šią datą Unix kūrėjai Bell Labs pasirinko aštuntojo dešimtmečio pradžioje kaip patogų, palyginti neseną atskaitos tašką. Ji neturi ypatingos reikšmės, be to, kad yra apvali data, artima sistemos kūrimo laikotarpiui. Kitos sistemos naudoja skirtingas epochas: Windows FILETIME prasideda 1601 m. sausio 1 d.; GPS laikas prasideda 1980 m. sausio 6 d.; NTP prasideda 1900 m. sausio 1 d.
Kas yra 2038 metų problema (Year 2038 problem)?
Sistemos, kurios Unix laiko žymas saugo kaip pasirašytą 32 bitų sveikąjį skaičių, gali atvaizduoti datas tik iki 2038 m. sausio 19 d. (laiko žyma 2,147,483,647). Po to reikšmė persipildo į didelį neigiamą skaičių, kuris atitinka datą 1901 m. Šiuolaikinės 64 bitų sistemos nėra paveiktos. Tačiau senos įterptosios sistemos, senesnės duomenų bazės ir 32 bitų programinė įranga vis dar gali būti pažeidžiamos ir iki tos datos gali reikėti migracijos.
Kaip gauti dabartinę Unix laiko žymą savo programavimo kalboje?
JavaScript: Math.floor(Date.now() / 1000). Python: import time; int(time.time()). PHP: time(). Bash: date +%s. PostgreSQL: EXTRACT(EPOCH FROM NOW())::int. MySQL: UNIX_TIMESTAMP(). Go: time.Now().Unix(). Visi šie variantai grąžina dabartinį laiką sekundėmis nuo Unix epochos.
Susiję straipsniai
Unix laiko žymos duomenų bazėse — saugojimas, užklausos ir gerosios praktikosLaiko žymas duomenų bazėse galima saugoti kaip Unix sveikuosius skaičius arba kaip natyvias datetime reikšmes — ir tai turi realių kompromisų. Štai kaip tai veikia PostgreSQL, MySQL ir SQLite bei kada kuris pasirinkimas prasmingas.
Epochos laikas API ir žurnaluose: kaip jį teisingai suprasti ir konvertuotiEpochos laikas pasitaiko visur — API, duomenų bazėse ir žurnaluose — tačiau jį lengva neteisingai interpretuoti. Šiame gide paaiškinama, ką reiškia epochos laikas, kodėl sistemos jį naudoja ir kaip jį konvertuoti išvengiant dažnų klaidų.