Zakaj ima Unix svoj koncept časa? Kakšna je epoha in v čem je problem Y2038?

Čas Unix je način predstavitve določenega datuma in ure, ki ga uporabljajo Linux, macOS in številni drugi interoperabilni sistemi. Tako razširjen je, da ga verjetno uporabljate, ne da bi se tega zavedali. Ko pa enkrat razumete čas Unixa, ga boste opazili v mnogih kontekstih. Za delo s časom Unixa vam lahko pomaga več orodij.

Kaj je namen časa Unix?

Čas Unix je skupno število sekund od določenega časa in datuma. To je oblika datuma / časa (ali časovnega žiga), ki se na videz razlikuje od človeko berljivih datumov in ure, ki smo jih vajeni. To je izključno zaradi učinkovitosti. Za shranjevanje ene številke, ki predstavlja sekunde, je potrebno veliko manj prostora kot za shranjevanje ločenih vrednosti za leto, mesec, uro itd.

Seveda v sodobnem smislu prostorska razlika sploh ni tako velika. Toda upoštevajte, da je Unix nastal v poznih šestdesetih letih, ko je bilo razpoložljivega prostora za shranjevanje veliko manj. Veliko se uporabljajo tudi časovni žigi, zato se njihova shramba sešteva. Vsaka datoteka ima na primer tri časovne žige.

instagram viewer

Formati je skoraj nemogoče prevesti v glavi, razen če ste matematični genij. A vseeno ima nekaj prednosti pred bolj berljivimi alternativami, kot je Sreda, 21. oktober 2015 07:28:00 GMT. Na hitro lahko naročite dve časovni znamki Unix. Običajno je tudi hitreje ugotoviti razliko med dvema časovnima žigoma. To še posebej velja za datume, ki so blizu, na primer ob sosednjih dneh.

O epohi

Torej, čas Unixa je skupno število sekund od določenega trenutka. Toda kaj je ta trenutek? To je 00:00:00 UTC na 1. januarja 1970. To se pogosto imenuje Unix Epoha. Programerji so ta datum izbrali zaradi prikladnosti, saj je bil to najbližji okrogli datum, ko so izumili čas Unixa.

Ta datum ste morda že videli, ko je šlo kaj narobe. Jasno je, da gre za napako, ki pa je videti zelo nenavadno, če ima datum pred časom, ko smo se mnogi rodili! Popolnoma razumljivo pa je, če veste za čas Unixa. Če kateri koli sistem skuša prikazati časovni žig, ki nima nobene vrednosti, se pogosto prevede na 0 in povzroči natančen datum epohe.

Oblika podatkov Unix Time

Strogo rečeno, ni enega. Prvotni podatkovni tip je bil 32-bitno celo število, kar pogosto ostaja tudi v veliko močnejših sistemih.

Ta podatkovni tip omogoča, da vrednost skupaj shrani 2 ^ 32 sekunde, kar je nekaj več kot 136 let. Ta vrednost je običajno podpisana, kar pomeni, da je lahko negativna ali pozitivna. Tako ponavadi predstavlja 68 let na obeh straneh obdobja, tj. 1902-2038.

Seveda je to še vedno omejeno obdobje. Toda primarna oblika zapisa časovnega žiga je bila za koncepte, kot je spreminjanje datotek. Zelo je bilo treba predstaviti čas blizu sedanjosti, ne pa starodavne zgodovine ali daleč v prihodnost. Tudi pri aplikacijah, kot so koledarji, je redko treba predstaviti datume več kot nekaj desetletij v prihodnost.

Toda to ne pomeni, da je to omejeno časovno obdobje brez težav...

Problem leta 2038

Napaka Y2K (ena najhujših programskih napak v zgodovini) vplivali na računalniške sisteme, ki so leta hranili kot dvomestne vrednosti. Ko je nastopilo leto 2000, so ga takšni sistemi obravnavali, kot da je leto 1900. V primeru, da to ni bilo tako katastrofalno, kot se je bal, predvsem zato, ker je veliko ljudi vnaprej porabilo veliko časa in truda, da bi se na to pripravilo.

10 najslabših programskih napak v zgodovini

V svoji zgodovinski zgodovini je kodiranje tudi povzročalo uničenje. Primeri malo slabe kode so povzročili katastrofo na večji ravni. Sledi 10 najhujših programskih napak v zgodovini.

Če ste bili pozorni v prejšnjem poglavju, ste morda opazili podobno težavo, ki bi lahko vplivala na čas Unixa. No, Unix time ima svoj problem s podatki: problem Y2k38. (To se pogosto imenuje problem, ne napaka; morda smo postali bolj optimistični od leta 2000!) Ko se čas Unixa dobesedno izteče leta 2038, bodo sistemi nove datume obravnavali kot 1902 ali 1970. Ali pa bodo morda povsem propadli.

Vsaj ta težava nas ne bo zadela ob polnoči na silvestrovo. Zadnja sekunda 32-bitnega časa Unixa bo padla 19. marca. V morebitnem primeru bomo do leta 2038 verjetno nadgradili večino sistemov, ali pa bodo do takrat že zastareli.

Nekaj ​​uporabnih virov za časovni žig

The Pretvornik epoh spletno mesto je verjetno najobsežnejši pretvornik časovnih žigov, ki je na voljo. Začne se s prikazom trenutnega časa Unixa - v realnem času - in poleg tega doda skoraj vse možne funkcije. Njegova glavna uporaba je za pretvorbo med časovnimi žigi in razumljivimi datumi v obe smeri.

Dan’s Tools je ogromna zbirka uporabnih spletnih aplikacij, med katerimi je tudi pretvornik časovnega žiga. Je bolj osnovna, vendar ima zelo čisto predstavitev in je enostavna za uporabo.

Time.is predstavlja še en, še bolj minimalističen videz. Prikazuje čas v številnih oblikah, vključno s časom Unix. V naslovu strani je naveden trenutni čas, kar je koristno.

V Linuxu in macOS-u je datum program je osnovni pripomoček za obravnavo datuma / časa, vključno s časovnimi žigi Unix. Poklican brez kakršnih koli argumentov, vrne trenutni datum / čas v čitljivi obliki:

$ datum
Sreda, 10. februarja 12:28:30 GMT, 2021

Če potrebujete trenutni datum / uro v času Unixa, uporabite +% s prepir:

$ datum +% s
1612960114

Iz človeško berljivega datuma lahko pretvorite v časovni žig s pomočjo -d zastavica, če je vaša različica datum podpira. Večina različic Linuxa bi morala privzeto:

$ date -d "2. januarja 1970" +% s
82800

Na macOS, datum je drugačen program, ki zahteva drugačen nabor zastavic:

$ date -j -f "% b% d% Y% T" "02. januar 1970 00:00:00" "+% s"
82800

Če greste v drugo smer, lahko iz časovnega žiga Unixa pretvorite s pomočjo -r zastava:

$ datum -r 1600000000
Nedelja 13. september 2020 13:26:40 BST

Nekateri drugi programi uporabljajo % s format za obravnavo časa Unixa. Če želite na primer prikazati datum spremembe datoteke v času Unixa, s Linux različica ls, lahko uporabite naslednje:

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

Kako uporabiti čas Unixa v programskih jezikih

PHP ima čas () funkcija, ki vrne trenutni časovni žig Unix. Svoje datum () funkcija kot drugi argument vzame časovni žig:

$ php -r 'datum odmeva ("Y-m-d", time ());'
2021-02-11

JavaScript se stvari loti na zanimiv način. Ima a Date.now () metoda, da dobite število milisekund od obdobja Unixa. Seveda lahko to delite s 1.000 in rezultat zaokrožite, da dobite enakovreden čas Unixa v sekundah:

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

Razumevanje časa Unix

Unix time je preprost koncept, ki se poraja marsikje. Ko ga enkrat razumete, vam bo morda na primer zelo koristen pri izračunu časovnih razlik. Prav tako lahko prepoznate, kdaj je lahko vzrok za nekatere napake.

Koncepti, kot so epoha in časovni žigi, so pomemben del začetka uporabe Linuxa. Če želite izvedeti več o bistvenih stvareh, kot so ls, si oglejte naš vodnik po osnovnih ukazih za Linux.

E-naslov
9 osnovnih ukazov za začetek uporabe Linuxa

Bi se radi seznanili z Linuxom? Začnite s temi osnovnimi ukazi za Linux, če se želite naučiti standardnih računalniških nalog.

Sorodne teme
  • Nedoločeno
O avtorju
Bobby Jack (27 objavljenih člankov)

Bobby je tehnološki navdušenec, ki je več kot dve desetletji delal kot razvijalec programske opreme. Navdušen je nad igranjem iger, dela kot urednik mnenj pri reviji Switch Player in je poglobljen v vse vidike spletnega založništva in spletnega razvoja.

Več od Bobbyja Jacka

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, preglede, brezplačne e-knjige in ekskluzivne ponudbe!

Še en korak…!

Potrdite svoj e-poštni naslov v e-poštnem sporočilu, ki smo vam ga pravkar poslali.

.