← Alle gereedskap

Unix-tydstempelomskakelaar

Skakel Unix-tydstempels na datums en terug onmiddellik in jou blaaier om. Leer epogtyd, sekondes en millisekondes, UTC-slaggate en die jaar 2038-probleem.

Unix-tydstempels sonder die hoofpyn

Vra drie ontwikkelaars hoe laat dit is en jy mag drie antwoorde kry, afhangend van waar hulle sit. Vra 'n Unix-tydstempel en jy kry presies een getal, dieselfde vir almal op die planeet. Daardie enkele heelgetal is waarom epog-tyd stilweg byna elke loglêer, databasisry, en API-respons onderlê wat jy ooit sal raakloop. Hierdie bladsy verduidelik wat daardie getal beteken, hoe om dit in albei rigtings te lees, en waar dit geneig is om mense te byt.

Gloeiende horlosie wat oplos in 'n stroom liggsyfers, wat Unix-epogtyd verteenwoordig
Epog-tyd is 'n enkele teller wat vorentoe tik sedert 1970.

Wat Unix-tyd werklik is

'n Unix-tydstempel is die aantal sekondes wat verloop het sedert 00:00:00 UTC op 1 Januarie 1970, sonder om skrikkelsekondes te tel. Daardie oomblik word die epog genoem, en dit is deur vroeë Unix-ingenieurs gekies bloot omdat dit 'n gerieflike ronde datum was om vanaf te tel. By die epog is die waarde presies 0. Elke sekonde daarna voeg een by, sodat die getal net groei. Datums voor 1970 is ook heeltemal geldig, uitgedruk as negatiewe heelgetalle.

Jy sal hierdie konsep ook POSIX-tyd, of losweg, epog-tyd hoor noem. Watter etiket ook al, die meganika is dieselfde: een ewig-groeiende teller van sekondes. Omdat dit 'n gewone heelgetal is eerder as 'n geformateerde string, kan 'n rekenaar dit in 'n paar grepe stoor en twee daarvan vergelyk met 'n enkele aftrekking.

Sekondes, millisekondes, en verwante

Klassieke Unix-tyd tel heel sekondes, wat die bekende tien-syfer-getal gee wat jy vandag sien. Maar baie omgewings het fyner resolusie nodig. JavaScript, byvoorbeeld, werk in millisekondes, wat 'n dertien-syfer-waarde produseer, en sommige stelsels gaan verder na mikrosekondes of nanosekondes. 'n Betroubare vuistreël: 'n tien-syfer-getal is sekondes, dertien syfers is millisekondes. As jou omgeskakelde datum êrens rondom 1970 land wanneer jy die hede verwag het, het jy amper seker millisekondes in 'n sekondeveld gevoer, of andersom. Ons omskakelaar bespeur outomaties die grootte-orde sodat jy selde hoef te raai.

Waarom ontwikkelaars daarop steun

Die groot wins is dat 'n tydstempel tydsonebuiteneutral is. Die heelgetal 1735689600 verwys na dieselfde oomblik in Tokio, Berlyn, en São Paulo. Om daardie getal te stoor in plaas van 'n geformateerde plaaslike string beteken jy hoef nooit te wonder aan watter horlosie 'n waarde behoort het nie. Sortering is ook triviaal, want chronologiese volgorde is bloot numeriese volgorde, sodat 'n databasisindeks oor 'n tydstempelkolom gebeure korrek sorteer sonder enige ontleding. Rekenkunde is ewe skoon: die gaping tussen twee gebeure is een aftrekking, en om 'n dag by te voeg, is om 86400 by te voeg. Hierdie eienskappe is presies waarom logs, tokens, kasgeheue, en boodskapwagtoue almal na epog-tyd gryp.

Omskakeling in albei rigtings

Om van 'n tydstempel na 'n mensdatum te gaan, beteken om die telling van sekondes te neem en dit op 'n kalender te projekteer, en dit dan te formateer in watter tydsone jy ook al omgee. Om die ander kant toe te gaan, neem jy 'n jaar, maand, dag, en tyd, besluit in watter tydsone dit uitgedruk word, en druk dit terug in sekondes sedert die epog. Ons instrument doen albei rigtings onmiddellik en heeltemal binne jou blaaier, sodat niks wat jy plak jou masjien verlaat nie. Plak 'n getal om dit te dekodeer, of kies 'n datum om dit te enkodeer, en lees die resultaat in beide UTC en jou plaaslike tyd op dieselfde oomblik.

Gloeiende tydlyn-lint met 'n merker wat langs 'n vloeiende stroom epog-sekondes gly
Een merker op een tydlyn, leesbaar as beide UTC en plaaslike tyd.

UTC teenoor plaaslike tyd, die klassieke slaggat

Die tydstempel self het geen tydsone nie; dit is altyd aan UTC geanker. Die verwarring verskyn slegs wanneer jy dit vertoon. As jy 1700000000 omskakel en jou skerm wys 'n aanduur, terwyl 'n kollega in 'n ander land 'n namiddaguur sien, is niks gebreek nie, julle kyk albei na dieselfde oomblik weergegee in verskillende plaaslike horlosies. Foute sluip in wanneer kode 'n plaaslike datum lees asof dit UTC was, of 'n muurhorlosie-tyd stempel sonder om die verskuiwing aan te teken. Die veilige gewoonte is om UTC te stoor en oor te dra, en 'n plaaslike verskuiwing eers op die heel laaste oomblik toe te pas, wanneer jy die waarde aan 'n persoon wys. In twyfel, vergelyk teen die UTC-lyn in die omskakelaar eerder as jou plaaslike een.

Die jaar-2038-probleem

Baie ouer stelsels het Unix-tyd in 'n getekende 32-bis-heelgetal gestoor. Daardie veld loop een sekonde na 03:14:07 UTC op 19 Januarie 2038 uit plek uit, wanneer die teller oorloop en na 'n negatiewe getal terugdraai, wat moontlik datums tot 1901 terugwerp. Dit is dieselfde familie kwessie as Y2K. Die goeie nuus is dat moderne bedryfstelsels en tale grootliks na 64-bis-tydstempels beweeg het, wat vir sowat 292 miljard jaar nie sal oorloop nie, sodat dit vir nuwe kode meesal 'n historiese kuriositeit werd om te ken is eerder as 'n noodgeval.

Vir meer blaaier-gebaseerde hulpmiddels, sien ons ontwikkelaarinstrumente, en as jy die syfers self moet bewerk, is die rekenaars net 'n klik weg.

Gereelde vrae

Wat is 'n Unix-tydstempel?

Dit is die aantal sekondes sedert 00:00:00 UTC op 1 Januarie 1970, sonder om skrikkelsekondes te tel. Daardie beginoomblik word die epog genoem, en die telling groei net oor tyd.

Waarom skakel my getal om na 'n datum naby 1970?

Jy het waarskynlik sekondes en millisekondes verwar. 'n Tien-syfer-getal is sekondes en 'n dertien-syfer-getal is millisekondes. Om millisekondes in 'n sekondeveld te voer, deel die skynbare tyd met sowat 'n duisend, wat jou naby die epog laat land.

Het 'n Unix-tydstempel 'n tydsone?

Nee. Die waarde is altyd aan UTC geanker. 'n Tydsone kom eers ter sprake wanneer jy die tydstempel as 'n mensleesbare datum vertoon, wat waarom dieselfde getal verskillende muurhorlosie-tye vir verskillende mense kan wys.

Hoe skakel ek 'n datum terug na 'n tydstempel om?

Verskaf die jaar, maand, dag, en tyd, besluit in watter tydsone daardie datum uitgedruk word, en die instrument druk dit terug in sekondes sedert die epog. Jy kan albei rigtings op hierdie bladsy onmiddellik in jou blaaier doen.

Wat is die jaar-2038-probleem?

Stelsels wat Unix-tyd in 'n getekende 32-bis-heelgetal stoor, loop een sekonde na 03:14:07 UTC op 19 Januarie 2038 oor. Moderne 64-bis-tydstempels vermy dit vir miljarde jare, sodat die meeste huidige sagteware onaangeraak is.

Word my data na 'n bediener gestuur?

Nee. Die omskakeling vind heeltemal binne jou blaaier plaas, sodat enige tydstempel of datum wat jy plak op jou eie toestel bly.