Kas yra „Unix“ laikas ir kada buvo „Unix“ epocha?

Kas yra „Unix“ laikas ir kada buvo „Unix“ epocha?

Kodėl „Unix“ turi savo laiko sampratą? Kokia epocha ir kokia Y2038 problema?





„Unix“ laikas yra tam tikros datos ir laiko atvaizdavimo priemonė, naudojama „Linux“, „MacOS“ ir daugelyje kitų sąveikių sistemų. Tai taip plačiai paplitusi, kad jūs tikriausiai naudojate tai nežinodami. Tačiau kai suprasite „Unix“ laiką, pastebėsite jį daugelyje kontekstų. Keletas įrankių gali padėti jums dirbti su „Unix“ laiku.





Koks yra Unix laiko tikslas?

„Unix“ laikas - tai sekundžių skaičius nuo fiksuoto laiko ir datos. Tai datos/laiko (arba laiko žymos) formatas, kuris atrodo kitaip nei mums suprantamos datos ir laikas. Taip yra tik dėl efektyvumo. Vienam sekundę skaičiui išsaugoti reikia daug mažiau vietos nei atskiroms metų, mėnesio, valandos ir kt.





Žinoma, šiuolaikiniu požiūriu erdvės skirtumas nėra toks didelis. Tačiau pagalvokite, kad „Unix“ atsirado 1960 -ųjų pabaigoje, kai turima saugykla buvo daug mažesnė. Laiko žymos taip pat naudojamos daug, todėl jų saugykla padidėja. Pavyzdžiui, kiekvienas failas turi tris laiko žymes.

Formato beveik neįmanoma išversti į galvą, nebent esate matematinis genijus. Tačiau ji vis dar turi tam tikrų pranašumų, palyginti su labiau skaitomomis alternatyvomis, tokiomis kaip Trečiadienis, 2015 m. Spalio 21 d. 07:28:00 GMT . Iš pirmo žvilgsnio galite labai lengvai užsisakyti du „Unix“ laiko žymes. Taip pat paprastai greičiau nustatomas skirtumas tarp dviejų laiko žymų. Tai ypač pasakytina apie artimas datas, pvz., Gretimas dienas.



Apie epochą

Taigi „Unix“ laikas yra bendras sekundžių skaičius nuo tam tikro laiko momento. Bet koks tas laiko momentas? Tai yra 00:00:00 UTC ant 1970 m. Sausio 1 d . Tai dažnai vadinama „Unix Epoch“. Programuotojai pasirinko šią datą epochai dėl patogumo, nes tai buvo artimiausia apvali data, kai jie sugalvojo „Unix“ laiką.

Galbūt matėte šią datą, kai kažkas nutiko ne taip. Aišku, kad tai klaida, bet atrodo labai keistai, kai atsiranda data, buvusi prieš tai, kai daugelis iš mūsų gimė! Tačiau tai visiškai suprantama, kai žinote apie „Unix“ laiką. Jei kuri nors sistema bando rodyti laiko žymę, kuri neturi jokios vertės, ji dažnai bus išversta į 0 ir bus pateikta tiksli epochos data.





kaip ištrinti hiberfil.sys windows 10

„Unix“ laiko duomenų formatas

Griežtai tariant, jo nėra. Pradinis duomenų tipas buvo 32 bitų sveikasis skaičius, ir tai dažnai išlieka net ir daug galingesnėse sistemose.

Šis duomenų tipas leidžia iš viso išsaugoti 2^32 sekundes, tai yra šiek tiek daugiau nei 136 metus. Ši vertė paprastai pasirašoma, tai reiškia, kad ji gali būti neigiama arba teigiama. Taigi, tai paprastai reiškia 68 metus abiejose epochos pusėse, ty 1902–2038 m.





Žinoma, tai dar ribotas laikotarpis. Tačiau pagrindinis laiko žymos formatas buvo naudojamas tokioms sąvokoms kaip failo modifikavimas. Labai reikėjo pavaizduoti laiką, esantį arti dabarties, o ne senovės istoriją ar tolimą ateitį. Net ir tokioms programoms kaip kalendoriai retai kada reikia nurodyti datas daugiau nei prieš kelis dešimtmečius ateityje.

Bet tai nereiškia, kad šis ribotas laikotarpis yra be problemų ...

2038 metų problema

Y2K klaida (viena iš blogiausių programavimo klaidų istorijoje) paveikė kompiuterines sistemas, kurios metus išsaugojo kaip dviženklę reikšmę. Kai atėjo 2000 -ieji, tokios sistemos tai traktuodavo taip, lyg būtų buvę 1900. Tuo atveju tai nebuvo taip katastrofiška, kaip buvo bijoma, daugiausia dėl to, kad daugelis žmonių iš anksto praleido daug laiko ir pastangų.

Jei atkreipėte dėmesį į ankstesnį skyrių, galbūt pastebėjote panašią problemą, kuri gali turėti įtakos „Unix“ laikui. Na, „Unix time“ turi savo duomenų problemą: Y2k38 problemą. (Tai dažnai vadinama problema, o ne klaida; galbūt nuo 2000 metų tapome optimistiškesni!) Kai 2038 m. „Unix“ laikas tiesiogine prasme baigsis, sistemos naujas datas traktuos kaip 1902 arba 1970 m. tiesiog nepavyks.

Bent jau ši problema mūsų nepasieks per Naujųjų metų vidurnaktį. Paskutinė 32 bitų „Unix“ laiko sekundė bus kovo 19 d. Tikėtina, kad iki 2038 m. Atnaujinsime daugumą sistemų, arba jos vis tiek bus pasenusios.

Kai kurie naudingi laiko žymos ištekliai

The Epochos keitiklis svetainė yra turbūt pats išsamiausias laiko žymos keitiklis. Jis pradedamas rodant esamą „Unix“ laiką realiuoju laiku ir prideda beveik visas įsivaizduojamas funkcijas. Pagrindinė jo paskirtis yra konvertuoti laiko žymes į žmonėms suprantamas datas abiem kryptimis.

„Dan's Tools“ yra didžiulė naudingų žiniatinklio programų kolekcija, iš kurių viena yra laiko žymos keitiklis . Tai paprastesnis, tačiau labai švarus ir lengvai naudojamas.

Laikas.yra pristato kitą, dar labiau minimalistinį vaizdą. Jis rodo laiką įvairiais formatais, įskaitant „Unix“ laiką. Į jo puslapio pavadinimą įtrauktas dabartinis laikas, kuris yra naudingas.

„Unix Time“ naudojimas su komandų eilutės įrankiais

„Linux“ ir „MacOS“ sistemose data programa yra pagrindinė priemonė, skirta tvarkyti datą/laiką, įskaitant „Unix“ laiko žymes. Skambinama be jokių argumentų, ji pateikia dabartinę datą/laiką žmonėms suprantamu formatu:

$ date
Wed Feb 10 12:28:30 GMT 2021

Jei jums reikia dabartinės datos/laiko „Unix“ laiku, naudokite +%s argumentas:

$ date +%s
1612960114

Galite konvertuoti iš žmogaus skaitomos datos į laiko žymę naudodami -d pažymėkite, jei jūsų versija data jį palaiko. Dauguma „Linux“ versijų pagal numatytuosius nustatymus turėtų:

$ date -d 'Jan 2 1970' +%s
82800

„MacOS“, data yra kitokia programa, kuriai reikia kitokio žymių rinkinio:

$ date -j -f '%b %d %Y %T' 'Jan 02 1970 00:00:00' '+%s'
82800

Eidami kita kryptimi, galite konvertuoti iš „Unix“ laiko žymos naudodami -r vėliava:

$ date -r 1600000000
Sun 13 Sep 2020 13:26:40 BST

Kai kurios kitos programos naudoja %s formatas, skirtas susidoroti su „Unix“ laiku. Pavyzdžiui, jei norite parodyti failo pakeitimo datą Unix laiku, naudodami „Linux“ versija ls , galite naudoti šiuos dalykus:

$ ls -l --time-style=+%s index.tmp.html
-rw-r--r-- 1 ubuntu ubuntu 17862 1521649818 index.tmp.html

Kaip naudoti „Unix“ laiką programavimo kalbomis

PHP turi laikas() funkcija, kuri grąžina esamą „Unix“ laiko žymą. Jo data() funkcija laiko laiko žymę kaip antrąjį argumentą:

$ php -r 'echo date('Y-m-d', time());'
2021-02-11

„JavaScript“ į dalykus žiūri įdomiai. Tai turi Date.now () būdas gauti milisekundžių skaičių nuo „Unix“ epochos. Žinoma, galite padalyti tai iš 1000 ir suapvalinti rezultatą, kad gautumėte lygiavertį „Unix“ laiką sekundėmis:

> Math.floor(Date.now() / 1000)
1613083012

„Unix“ laiko supratimas

„Unix“ laikas yra paprasta sąvoka, kuri atsiranda daugelyje vietų. Kai tai suprasite, tai gali būti labai naudinga, pavyzdžiui, skaičiuojant laiko skirtumus. Taip pat galite atpažinti, kada tai gali būti tam tikrų klaidų priežastis.

Tokios sąvokos kaip epocha ir laiko žymos yra svarbi pradžia naudojant „Linux“. Norėdami sužinoti daugiau apie esminius dalykus, pvz ls , peržiūrėkite mūsų pagrindinių „Linux“ komandų vadovą.

Dalintis Dalintis „Tweet“ Paštu 9 pagrindinės komandos, padėsiančios jums pradėti naudotis „Linux“

Norite susipažinti su „Linux“? Pradėkite nuo šių pagrindinių „Linux“ komandų, kad išmoktumėte standartines skaičiavimo užduotis.

Skaityti toliau
Susijusios temos Apie autorių Bobis Džekas(Paskelbti 58 straipsniai)

Bobby yra technologijų entuziastas, kuris beveik du dešimtmečius dirbo programinės įrangos kūrėju. Jis aistringai žaidžia, dirba „Switch Player Magazine“ apžvalgų redaktoriumi ir yra pasinėręs į visus internetinės publikacijos ir žiniatinklio kūrimo aspektus.

Daugiau iš Bobby Jack

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia