Kas ir Unix laiks un kad bija Unix laikmets?

Kas ir Unix laiks un kad bija Unix laikmets?

Kāpēc Unix ir savs laika jēdziens? Kāds ir laikmets un kāda ir Y2038 problēma?





Unix laiks ir līdzeklis konkrēta datuma un laika attēlošanai, ko izmanto Linux, macOS un daudzas citas sadarbspējīgas sistēmas. Tas ir tik plaši izplatīts, ka jūs, iespējams, to izmantojat, to neapzinoties. Tomēr, kad esat sapratis Unix laiku, jūs to pamanīsit daudzos kontekstos. Vairāki rīki var palīdzēt strādāt ar Unix laiku.





Kāds ir Unix laika mērķis?

Unix laiks ir kopējais sekunžu skaits kopš noteikta laika un datuma. Tas ir datuma/laika (vai laika zīmoga) formāts, kas atšķiras no cilvēkiem lasāmiem datumiem un laikiem, pie kuriem esam pieraduši. Tas ir tikai efektivitātes apsvērumu dēļ. Viena skaitļa, kas attēlo sekundes, uzglabāšana aizņem daudz mazāk vietas, nekā atsevišķu gada, mēneša, stundas uc vērtību saglabāšana.





Protams, mūsdienu ziņā telpu atšķirība nemaz nav tik liela. Bet ņemiet vērā, ka Unix radās 1960. gadu beigās, kad pieejamā krātuve bija daudz mazāka. Laika zīmogi tiek izmantoti arī daudz, tāpēc to krātuve palielinās. Piemēram, katram failam ir saistīti trīs laika zīmogi.

Formātu ir gandrīz neiespējami tulkot savā galvā, ja vien neesat matemātisks ģēnijs. Bet tam joprojām ir dažas priekšrocības salīdzinājumā ar lasāmākām alternatīvām, piemēram Trešdiena, 2015. gada 21. oktobris 07:28:00 GMT . Īsumā varat ļoti viegli pasūtīt divus Unix laika zīmogus. Parasti ir arī ātrāk noskaidrot atšķirību starp diviem laika zīmogiem. Tas jo īpaši attiecas uz tuviem datumiem, piemēram, blakus esošajām dienām.



Par laikmetu

Tātad Unix laiks ir kopējais sekunžu skaits kopš konkrēta laika. Bet kāds ir tas laika punkts? Tā ir 00:00:00 UTC uz 1970. gada 1. janvāris . To bieži dēvē par Unix Epoch. Programmētāji izvēlējās šo datumu laikmetam ērtības labad, jo tas bija tuvākais apaļais datums, kad viņi izgudroja Unix laiku.

Jūs, iespējams, esat redzējuši šo datumu, kad kaut kas ir nogājis greizi. Tā nepārprotami ir kļūda, taču tā izskatās ļoti dīvaini, ja tā rezultātā tiek datēts datums pirms laika, kad daudzi no mums piedzima! Tomēr tas ir pilnīgi saprotams, ja jūs zināt par Unix laiku. Ja kāda sistēma mēģina parādīt laika zīmogu, kuram nav vērtības, tā bieži tiks tulkota uz 0 un radīs precīzu laikmeta datumu.





kā pievienot filtrus tālummaiņai

Unix laika datu formāts

Stingri sakot, tāda nav. Sākotnējais datu veids bija 32 bitu vesels skaitlis, un tas bieži vien paliek, pat daudz jaudīgākās sistēmās.

Šis datu veids ļauj vērtībai kopumā saglabāt 2^32 sekundes, kas ir nedaudz vairāk par 136 gadiem. Šī vērtība parasti ir parakstīta, kas nozīmē, ka tā var būt negatīva vai pozitīva. Tātad tas parasti attēlo 68 gadus abās laikmeta pusēs, ti, 1902.-2038.





Tas, protams, joprojām ir ierobežots periods. Bet laika zīmoga formāta galvenais lietojums bija tāds jēdziens kā faila modificēšana. Nepieciešamība bija ļoti attēlot laiku tuvu tagadnei, nevis seno vēsturi vai tālu nākotnē. Pat tādām lietojumprogrammām kā kalendāri reti kad ir jāatspoguļo datumi vairāk nekā dažas desmitgades nākotnē.

Bet tas nenozīmē, ka šis ierobežotais laika posms ir bez problēmām…

2038. gada problēma

Y2K kļūda (viena no vissliktākajām programmēšanas kļūdām vēsturē) ietekmēja datorsistēmas, kas gadus glabāja kā divciparu vērtības. Kad pienāca 2000. gads, šādas sistēmas to uztvēra tā, it kā tas būtu 1900. Gadījumā, tas nebija tik katastrofāli, kā baidījās, galvenokārt tāpēc, ka daudzi cilvēki, gatavojoties tam, pavadīja daudz laika un pūļu.

Ja iepriekšējā sadaļā pievērsāt uzmanību, iespējams, pamanījāt līdzīgu problēmu, kas varētu ietekmēt Unix laiku. Nu, Unix laikam ir sava datu problēma: Y2k38 problēma. (To bieži dēvē par problēmu, nevis kļūdu; varbūt mēs esam kļuvuši optimistiskāki kopš 2000. gada!) Kad Unix laiks burtiski beidzas 2038. gadā, sistēmas jaunus datumus uzskatīs par 1902. vai 1970. gadu. vienkārši neizdosies.

Vismaz šī problēma mūs neskars Jaungada nakts pusnaktī. 32 bitu Unix laika pēdējā sekunde iekritīs 19. martā. Iespējams, ka līdz 2038. gadam mēs jaunināsim lielāko daļu sistēmu, vai arī tās tik un tā būs novecojušas.

Daži noderīgi laika zīmoga resursi

The Laikmeta pārveidotājs vietne, iespējams, ir visplašākais pieejamo laika zīmogu pārveidotājs. Tas sākas, parādot pašreizējo Unix laiku reāllaikā, un tam pievieno gandrīz visas iedomājamās funkcijas. To galvenokārt izmanto, lai abos virzienos pārvērstu laika zīmogus un cilvēkam lasāmus datumus.

Dan's Tools ir milzīga noderīgu tīmekļa lietotņu kolekcija, no kurām viena ir laika zīmogu pārveidotājs . Tas ir vienkāršāk, taču tajā ir ļoti tīra prezentācija un to ir viegli lietot.

Laiks.ir piedāvā vēl vienu, vēl minimālistiskāku izskatu. Tas parāda laiku vairākos formātos, ieskaitot Unix laiku. Tās lapas nosaukumā ir iekļauts pašreizējais laiks, kas ir noderīgi.

Unix Time izmantošana ar komandrindas rīkiem

Operētājsistēmās Linux un macOS datums programma ir galvenā utilīta datuma/laika apstrādei, ieskaitot Unix laika zīmogus. Izsaukts bez jebkādiem argumentiem, tas atgriež pašreizējo datumu/laiku cilvēkam lasāmā formātā:

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

Ja nepieciešams pašreizējais datums/laiks Unix laikā, izmantojiet +%s arguments:

$ date +%s
1612960114

Jūs varat pārvērst no cilvēkam lasāmā datuma par laika zīmogu, izmantojot -d atzīmējiet savu versiju datums to atbalsta. Lielākajai daļai Linux versiju pēc noklusējuma vajadzētu:

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

MacOS, datums ir cita programma, kurai nepieciešams cits karodziņu komplekts:

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

Pārejot citā virzienā, varat konvertēt no Unix laika zīmoga, izmantojot -r karogs:

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

Dažas citas programmas izmanto %s formātā, lai tiktu galā ar Unix laiku. Piemēram, ja vēlaties parādīt faila modifikācijas datumu Unix laikā, ar Linux versija ls , varat izmantot sekojošo:

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

Kā izmantot Unix laiku programmēšanas valodās

PHP ir laiks() funkcija, kas atgriež pašreizējo Unix laika zīmogu. Tā datums() funkcija kā otro argumentu izmanto laika zīmogu:

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

JavaScript pievēršas lietām interesantā veidā. Tam ir a Date.now () metode, kā iegūt milisekundes kopš Unix laikmeta. Protams, jūs varat to dalīt ar 1000 un noapaļot rezultātu, lai iegūtu ekvivalentu Unix laiku sekundēs:

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

Izpratne par Unix laiku

Unix laiks ir vienkāršs jēdziens, kas parādās daudzās vietās. Kad jūs to sapratīsit, tas varētu šķist diezgan noderīgi, piemēram, aprēķinot laika atšķirības. Varat arī atpazīt, kad tas var būt dažu kļūdu cēlonis.

Tādi jēdzieni kā laikmets un laika zīmogi ir svarīga daļa, lai sāktu darbu ar Linux. Lai uzzinātu vairāk par būtiskām lietām, piemēram ls , iepazīstieties ar mūsu rokasgrāmatu par pamata Linux komandām.

Kopīgot Kopīgot Čivināt E -pasts 9 pamata komandas, lai sāktu darbu ar Linux

Vai vēlaties iepazīties ar Linux? Sāciet ar šīm pamata Linux komandām, lai uzzinātu standarta skaitļošanas uzdevumus.

Lasīt Tālāk
Saistītās tēmas Par autoru Bobijs Džeks(58 raksti publicēti)

Bobijs ir tehnoloģiju entuziasts, kurš gandrīz divus gadu desmitus strādāja par programmatūras izstrādātāju. Viņš aizraujas ar spēlēm, strādā par atsauksmju redaktoru žurnālā Switch Player un ir iedziļinājies visos tiešsaistes publicēšanas un tīmekļa izstrādes aspektos.

Vairāk no Bobija Džeka

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu