Sayop nga Paghunahuna sa mga Programmer Bahin sa Unix Time

Nangayo kog pasaylo Patrick McKenzie.

Kagahapon Danny Nangutana ko bahin sa pipila ka makapaikag nga mga kamatuoran bahin sa oras sa Unix, ug nahinumdom ko nga usahay kini molihok nga dili tinuud.

Kining tulo ka kamatuoran daw hilabihan ka makataronganon ug makataronganon, dili ba?

  1. Ang Unix time mao ang gidaghanon sa mga segundo sukad Enero 1, 1970 00:00:00 UTC.
  2. Kung maghulat ka sa eksaktong usa ka segundo, ang oras sa Unix mausab sa eksaktong usa ka segundo.
  3. Ang oras sa Unix dili gayud molihok paatras.

Walay usa niini ang tinuod.

Apan dili igo ang yanong pag-ingon, β€œWala niini ang tinuod,” nga walay pagpatin-aw. ngano. Tan-awa sa ubos para sa mga katin-awan. Apan kung gusto nimong hunahunaon ang imong kaugalingon, ayaw pag-scroll lapas sa litrato sa orasan!

Sayop nga Paghunahuna sa mga Programmer Bahin sa Unix Time
Ang orasan sa lamesa gikan sa 1770s. Gihugpong ni John Leroux. gikan sa Maayong mga koleksyon. Gipatik ubos sa lisensya CC BY

Ang tulo ka sayop nga pagtuo adunay usa ka rason: paglukso segundos. Kung dili ka pamilyar sa mga leap seconds, ania ang usa ka dali nga pakisayran:

Ang oras sa UTC gitino sa duha ka hinungdan:

  • Internasyonal nga Panahon sa Atom: Average nga pagbasa gikan sa gatusan ka atomic nga mga orasan sa tibuok kalibutan. Atong masukod ang ikaduha pinaagi sa electromagnetic nga mga kabtangan sa usa ka atomo, ug kini mao ang labing tukma nga pagsukod sa panahon nga nahibaloan sa siyensiya.
  • Panahon sa Kalibutan, base sa pagtuyok sa Yuta palibot sa kaugalingong axis niini. Ang usa ka bug-os nga rebolusyon usa ka adlaw.

Ang problema kay kining duha ka numero dili kanunay magkatugma. Ang pagtuyok sa Yuta dili makanunayon - kini anam-anam nga mohinay, mao nga ang mga adlaw sa Universal Time nahimong mas taas. Sa laing bahin, ang atomic nga mga orasan tukma kaayo ug makanunayon sa minilyon ka tuig.

Kung ang duha ka higayon dili ma-sync, ang usa ka segundo idugang o kuhaon gikan sa UTC aron ibalik kini sa pag-sync. Sukad sa 1972 nga serbisyo IERS (nga nagpadagan niini nga kaso) nagdugang 27 dugang nga mga segundo. Ang resulta mao ang 27 UTC nga mga adlaw nga adunay gidugayon nga 86 segundos. Sa teoriya, posible ang usa ka adlaw nga adunay gidugayon nga 401 segundos (minus usa). Ang duha nga mga kapilian sukwahi sa sukaranan nga pangagpas sa oras sa Unix.

Ang oras sa Unix nagtuo nga ang matag adlaw molungtad og eksakto nga 86 segundos (400 Γ— 60 Γ— 60 = 24), nga wala’y dugang nga mga segundo. Kung mahitabo ang ingon nga paglukso, ang oras sa Unix molukso usa ka segundo, o mag-ihap duha ka segundo sa usa. Hangtud sa 86, nawala ang 400 ka segundos nga paglukso.

Busa ang atong sayop nga pagsabot kinahanglang dugangan sama sa mosunod:

  • Ang Unix time mao ang gidaghanon sa mga segundo sukad Enero 1, 1970 00:00:00 UTC minus leap seconds.
  • Kung maghulat ka sa eksaktong usa ka segundo, ang oras sa Unix mausab sa eksaktong usa ka segundo, gawas kon ang leap second gikuha.

    Hangtud karon, ang mga segundo wala pa matangtang sa praktis (ug ang paghinay sa pagtuyok sa Yuta nagpasabot nga dili kini posible), apan kung kini mahitabo, kini nagpasabot nga ang adlaw sa UTC mahimong usa ka segundo nga mas mubo. Niini nga kaso, ang kataposang segundo sa UTC (23:59:59) gilabay.

    Ang matag adlaw sa Unix adunay parehas nga gidaghanon sa mga segundo, mao nga ang katapusang Unix nga segundo sa usa ka gipamubo nga adlaw dili katumbas sa bisan unsang oras sa UTC. Ania ang hitsura niini, sa quarter-second nga mga agwat:

    Sayop nga Paghunahuna sa mga Programmer Bahin sa Unix Time

    Kung magsugod ka sa 23:59:58:00 UTC ug maghulat usa ka segundo, ang oras sa Unix mouswag sa duha ka segundo sa UTC ug ang timestamp sa Unix 101 dili ma-assign kang bisan kinsa.

  • Ang oras sa Unix dili na mabalik, hangtod madugangan ang usa ka leap second.

    Nahitabo na kini 27 ka beses sa praktis. Sa pagtapos sa adlaw sa UTC, dugang nga segundo ang idugang sa 23:59:60. Ang Unix adunay parehas nga gidaghanon sa mga segundo sa usa ka adlaw, mao nga dili kini makadugang usa ka dugang nga segundo - sa baylo kinahanglan nga sublion ang mga timestamp sa Unix sa katapusang segundo. Ania ang hitsura niini, sa quarter-second nga mga agwat:

    Sayop nga Paghunahuna sa mga Programmer Bahin sa Unix Time

    Kung magsugod ka sa 23:59:60.50 ug maghulat tunga sa segundo, ang oras sa Unix nibalik sa tunga sa segundo, ug ang Unix 101 timestamp katumbas sa duha ka UTC segundos.

Tingali dili ra kini ang mga katingad-an sa mga panahon sa Unix - ang akong nahinumduman kagahapon.

Panahon - kaayo talagsaon nga butang.

Source: www.habr.com

Idugang sa usa ka comment