Kāpēc Unix ir sava laika koncepcija? Kas 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, izmantojat to neapzinoties. Tiklīdz jūs sapratīsit Unix laiku, pamanīsit to 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ējo sekunžu skaits kopš fiksēta laika un datuma. Tas ir datuma / laika (vai laika zīmoga) formāts, kas izskatās citādāk nekā cilvēkiem pierasti datumi un laiki, pie kuriem esam pieraduši. Tas ir tikai efektivitātes apsvērumu dēļ. Vienu ciparu, kas apzīmē sekundes, glabāšanai nepieciešams daudz mazāk vietas nekā atsevišķu vērtību glabāšanai gadā, mēnesī, stundā utt.

Protams, mūsdienu izteiksmē telpas 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 uzglabāšana summējas. Piemēram, katram failam ir pievienoti trīs laika zīmogi.

instagram viewer

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

Par laikmetu

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

Jūs, iespējams, labi redzējāt šo datumu, kad kaut kas noiet greizi. Tā nepārprotami ir kļūda, taču izskatās ļoti dīvaini, ja tās rezultātā datums ir pirms daudzu mūsu dzimšanas laika! Tomēr tas ir pilnīgi saprotams, kad jūs zināt par Unix laiku. Ja kāda sistēma mēģina parādīt laika zīmogu, kam nav nekādas vērtības, tas bieži tiek pārveidots par 0 un tiek iegūts precīzs laikmeta datums.

Unix laika datu formāts

Stingri sakot, nav viena. Sākotnējais datu tips bija 32 bitu vesels skaitlis, un tas bieži notiek pat daudz jaudīgākās sistēmās.

Šis datu tips ļauj vērtībai kopumā saglabāt 2 ^ 32 sekundes, kas ir nedaudz vairāk par 136 gadiem. Šo vērtību parasti paraksta, tas nozīmē, ka tā var būt negatīva vai pozitīva. Tātad tas parasti pārstāv 68 gadus abās laikmeta pusēs, t.i., 1902. – 2038.

Tas, protams, joprojām ir ierobežots periods. Laika zīmoga formāta primārais pielietojums bija tāds jēdziens kā faila modifikācija. Nepieciešamība bija pārstāvēt laiku, kas ir tuvu tagadnei, nevis seno vēsturi vai tālu nākotnē. Pat tādām lietojumprogrammām kā kalendāri reti ir nepieciešams attēlot datumus, kas ir vairāk nekā pāris gadu desmitus 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 sliktākajām programmēšanas kļūdām vēsturē) ietekmēja datorsistēmas, kurās gadi tika glabāti kā divciparu vērtības. Kad iestājās 2000. gads, šādas sistēmas izturējās pret to tā, it kā tas būtu 1900. gads. Šajā gadījumā tas nebija tik katastrofāls, kā baidījās, galvenokārt tāpēc, ka daudzi cilvēki daudz laika un pūļu iepriekš pavadīja, gatavojoties tam.

10 sliktākās programmēšanas kļūdas vēsturē

Savā daudzstāvīgajā pagātnē kodējot arī kaltas iznīcināšanas. Nedaudz slikta koda gadījumi lielā mērā izraisīja katastrofu. Šīs ir 10 sliktākās programmēšanas kļūdas vēsturē.

Ja jūs pievērsāt uzmanību iepriekšējā sadaļā, iespējams, pamanījāt līdzīgu problēmu, kas varētu ietekmēt Unix laiku. Nu, Unix laikam patiešām ir sava datu problēma: problēma ar Y2k38. (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 2038. gadā burtiski beidzas Unix laiks, sistēmas par jauniem datumiem uzskatīs vai nu 1902., vai 1970. gadu. Vai, iespējams, viņi vienkārši neizdosies.

Vismaz šī problēma mūs nesasniegs Jaungada vakara 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 tikmēr būs novecojušas.

Daži noderīgi laika zīmoga resursi

The Laikmeta pārveidotājs vietne, iespējams, ir visplašākais pieejamais laika zīmogu pārveidotājs. Tas sākas ar reālā laika pašreizējā Unix laika parādīšanu un tam pievieno gandrīz katru iedomājamo funkciju. Tās galvenais pielietojums ir konvertēšana starp laika zīmogiem un cilvēkiem lasāmiem datumiem abos virzienos.

Dan's Tools ir milzīga noderīgu tīmekļa lietotņu kolekcija, no kurām viena ir laika zīmoga pārveidotājs. Tas ir vienkāršāks, taču tam 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īgs.

Operētājsistēmās Linux un MacOS datums programma ir galvenā lietderība, lai apstrādātu datumu / laiku, ieskaitot Unix laika zīmogus. Zvanot bez jebkādiem argumentiem, tas atgriež pašreizējo datumu / laiku cilvēkiem lasāmā formātā:

$ datums
10. februāris, trešdien, plkst. 12:28:30, GMT 2021. gads

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

$ datums +% s
1612960114

Varat konvertēt no datuma, ko cilvēks var nolasīt, par laika zīmogu, izmantojot -d atzīmējiet, ja jūsu versija ir datums atbalsta to. Pēc noklusējuma lielākajai daļai Linux versiju:

$ datums -d "1970. gada 2. janvāris" +% s
82800

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

$ date -j -f "% b% d% Y% T" "1970. gada 2. janvāris 00:00:00" "+% s"
82800

Pārejot uz otru pusi, varat konvertēt no Unix laika zīmoga, izmantojot -r karogs:

$ datums -r 1600000000
Sv. 2020. gada 13. septembra pulksten 13:26:40 BST

Dažās citās programmās tiek izmantots % s formātā, lai tiktu galā ar Unix laiku. Piemēram, ja faila modifikācijas datumu vēlaties parādīt Unix laikā, ar Linux versija ls, varat izmantot:

$ 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 otrs arguments ir laika zīmogs:

$ php -r 'atbalss datums ("Y-m-d", laiks ());'
2021-02-11

JavaScript pieeja lietām ir interesanta. Tam ir Date.now () metode, lai iegūtu milisekunžu skaitu kopš Unix laikmeta. Protams, jūs varat dalīt to ar 1000 un noapaļot rezultātu, lai sekundēs iegūtu ekvivalentu Unix laiku:

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

Unix laika izpratne

Unix laiks ir vienkāršs jēdziens, kas aug daudzās vietās. Tiklīdz to sapratīsit, tas, iespējams, var šķist diezgan noderīgs, piemēram, aprēķinot laika starpības. Varat arī atpazīt, kad tas var būt noteiktu kļūdu cēlonis.

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

E-pasts
9 pamata komandas, lai jūs 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.

Saistītās tēmas
  • Nav norādīts
Par autoru
Bobijs Džeks (Publicēti 27 raksti)

Bobijs ir tehnoloģiju entuziasts, kurš gandrīz divas desmitgades strādāja par programmatūras izstrādātāju. Viņš aizrauj spēles, strādā par atsauksmju redaktoru žurnālā Switch Player un ir iedziļinājies visos tiešsaistes izdevējdarbības 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 par tehniskiem padomiem, atsauksmēm, bezmaksas e-grāmatām un ekskluzīviem piedāvājumiem!

Vēl viens solis !!!

Lūdzu, apstipriniet savu e-pasta adresi e-pastā, kuru tikko nosūtījām.

.