Kunċetti Żbaljati tal-Programmaturi Dwar Ħin Unix

niskuża ruħi Patrick McKenzie.

Ilbieraħ Danny Staqsejt dwar xi fatti interessanti dwar il-ħin tal-Unix, u ftakart li xi drabi taħdem kompletament b'mod intuwittiv.

Dawn it-tliet fatti jidhru estremament raġonevoli u loġiċi, hux?

  1. Il-ħin Unix huwa n-numru ta’ sekondi mill-1 ta’ Jannar 1970 00:00:00 UTC.
  2. Jekk tistenna eżattament sekonda, il-ħin Unix jinbidel eżattament b'sekonda.
  3. Il-ħin Unix qatt ma jmur lura.

Xejn minn dan mhu minnu.

Imma mhux biżżejjed li sempliċement tgħid, “Xejn minn dan mhu minnu,” mingħajr ma tispjega. għaliex. Ara hawn taħt għal spjegazzjonijiet. Imma jekk trid taħseb għalik innifsek, iscrollx wara l-istampa tal-arloġġ!

Kunċetti Żbaljati tal-Programmaturi Dwar Ħin Unix
Arloġġ tal-mejda mill-1770s. Miġbura minn John Leroux. Minn Kollezzjonijiet ta' merħba. Ippubblikat taħt liċenzja CC BY

It-tliet kunċetti żbaljati għandhom raġuni waħda: sekondi qabża. Jekk m'intix familjari mas-sekondi qabża, hawn referenza ta' malajr:

Il-ħin UTC huwa determinat minn żewġ fatturi:

  • Ħin Atomika Internazzjonali: Qari medju minn mijiet ta' arloġġi atomiċi madwar id-dinja. Nistgħu nkejlu t-tieni mill-proprjetajiet elettromanjetiċi ta 'atomu, u dan huwa l-aktar kejl preċiż tal-ħin magħruf mix-xjenza.
  • Ħin Dinji, ibbażat fuq ir-rotazzjoni tad-Dinja madwar l-assi tagħha stess. Rivoluzzjoni waħda sħiħa hija ġurnata waħda.

Il-problema hija li dawn iż-żewġ numri mhux dejjem jaqblu. Ir-rotazzjoni tad-Dinja mhix konsistenti - tnaqqas gradwalment, u għalhekk il-ġranet fil-Ħin Universali jsiru itwal. Min-naħa l-oħra, arloġġi atomiċi huma devilishly preċiżi u kostanti fuq miljuni ta 'snin.

Meta żewġ darbiet ma jiġux sinkronizzati, tiġi miżjuda jew imneħħija sekonda mill-UTC biex terġa' tinġieb fis-sinkronizzazzjoni. Mill-1972 servizz IERS (li jmexxi dan il-każ) żiedet 27 sekonda żejda. Ir-riżultat kien ta’ 27 ġurnata UTC b’tul ta’ 86 sekonda. Teoretikament, ġurnata b'tul ta' 401 sekonda (nieqes waħda) hija possibbli. Iż-żewġ għażliet jikkontradixxu l-assunzjoni fundamentali tal-ħin Unix.

Il-ħin Unix jassumi li kull jum idum eżattament 86 sekonda (400 × 60 × 60 = 24), mingħajr ebda sekonda addizzjonali. Jekk qabża bħal din isseħħ, allura l-ħin Unix jew jaqbeż sekonda waħda, jew jgħodd żewġ sekondi f'wieħed. Mill-86, hija nieqsa 400 sekonda qabża.

Allura l-kunċetti żbaljati tagħna jeħtieġ li jiġu supplimentati kif ġej:

  • Il-ħin Unix huwa n-numru ta’ sekondi mill-1 ta’ Jannar 1970 00:00:00 UTC nieqes sekondi qabża.
  • Jekk tistenna eżattament sekonda, il-ħin Unix jinbidel eżattament b'sekonda waħda, sakemm it-tieni qabża ma tkunx tneħħiet.

    S'issa, is-sekondi qatt ma tneħħew fil-prattika (u t-tnaqqis tar-rotazzjoni tad-Dinja jfisser li dan mhux probabbli), iżda jekk qatt ġara, ikun ifisser li l-ġurnata UTC ssir sekonda iqsar. F'dan il-każ, l-aħħar sekonda tal-UTC (23:59:59) hija skartata.

    Kull ġurnata Unix għandha l-istess numru ta' sekondi, għalhekk l-aħħar sekonda Unix ta' ġurnata mqassra ma tikkorrispondi għal ebda ħin UTC. Hawn kif jidher, f'intervalli ta' kwart ta' sekonda:

    Kunċetti Żbaljati tal-Programmaturi Dwar Ħin Unix

    Jekk tibda fit-23:59:58:00 UTC u tistenna sekonda, il-ħin Unix javvanza żewġ sekondi UTC u l-timestamp Unix 101 ma jiġi assenjat lil ħadd.

  • Iż-żmien Unix qatt ma jista 'jmur lura, sakemm tiżdied sekonda leap.

    Dan diġà ġara 27 darba fil-prattika. Fl-aħħar tal-ġurnata UTC, tiżdied sekonda addizzjonali f'23:59:60. Unix għandu l-istess numru ta' sekondi f'ġurnata, għalhekk ma jistax iżżid sekonda żejda - minflok irid jirrepeti l-timestamps ta' Unix għall-aħħar sekonda. Hawn kif jidher, f'intervalli ta' kwart ta' sekonda:

    Kunċetti Żbaljati tal-Programmaturi Dwar Ħin Unix

    Jekk tibda fi 23:59:60.50 u stenna nofs sekonda, il-ħin Unix jiġi lura b'nofs sekonda, u l-timestamp Unix 101 jikkorrispondi għal żewġ sekondi UTC.

Dawn probabbilment mhumiex l-uniċi oddities ta 'żminijiet Unix - eżatt dak li ftakart ilbieraħ.

Ħin - ħafna ħaġa stramba.

Sors: www.habr.com

Żid kumment