Mga Maling Paniniwala ng Programmer Tungkol sa Unix Time

humihingi ako ng pasensya Patrick McKenzie.

kahapon Danny Nagtanong ako tungkol sa ilang mga kagiliw-giliw na katotohanan tungkol sa oras ng Unix, at naalala ko na kung minsan ay ganap itong gumagana nang hindi intuitive.

Ang tatlong katotohanang ito ay tila lubhang makatwiran at lohikal, hindi ba?

  1. Ang Unix time ay ang bilang ng mga segundo mula noong Enero 1, 1970 00:00:00 UTC.
  2. Kung maghintay ka ng eksaktong isang segundo, ang oras ng Unix ay magbabago nang eksaktong isang segundo.
  3. Ang oras ng Unix ay hindi kailanman gumagalaw pabalik.

Wala sa mga ito ang totoo.

Ngunit hindi sapat na sabihin lamang, "Wala sa mga ito ang totoo," nang hindi nagpapaliwanag. bakit. Tingnan sa ibaba para sa mga paliwanag. Ngunit kung gusto mong mag-isip para sa iyong sarili, huwag mag-scroll lampas sa larawan ng orasan!

Mga Maling Paniniwala ng Programmer Tungkol sa Unix Time
Table clock mula 1770s. Pinagsama ni John Leroux. Mula sa Maligayang pagdating mga koleksyon. Nai-publish sa ilalim ng lisensya CC BY

Lahat ng tatlong maling akala ay may isang dahilan: mga segundong tumalon. Kung hindi ka pamilyar sa mga leap seconds, narito ang isang mabilis na sanggunian:

Ang oras ng UTC ay tinutukoy ng dalawang salik:

  • International Atomic Time: Average na pagbabasa mula sa daan-daang atomic na orasan sa buong mundo. Masusukat natin ang pangalawa sa pamamagitan ng mga electromagnetic na katangian ng isang atom, at ito ang pinakatumpak na pagsukat ng oras na kilala sa agham.
  • Oras ng mundo, batay sa pag-ikot ng Earth sa sarili nitong axis. Ang isang buong rebolusyon ay isang araw.

Ang problema ay hindi palaging magkatugma ang dalawang numerong ito. Ang pag-ikot ng Earth ay hindi pare-pareho - ito ay unti-unting bumagal, kaya ang mga araw sa Universal Time ay nagiging mas mahaba. Sa kabilang banda, ang mga atomic na orasan ay tumpak at pare-pareho sa milyun-milyong taon.

Kapag dalawang beses na hindi naka-sync, may idinaragdag o inaalis na segundo mula sa UTC upang mai-sync muli ang mga ito. Mula noong 1972 serbisyo IERS (na nagpapatakbo sa kasong ito) ay nagdagdag ng 27 dagdag na segundo. Ang resulta ay 27 UTC araw na may tagal na 86 segundo. Sa teorya, posible ang isang araw na may tagal na 401 segundo (minus one). Ang parehong mga pagpipilian ay sumasalungat sa pangunahing pagpapalagay ng oras ng Unix.

Ipinapalagay ng Unix time na ang bawat araw ay tumatagal ng eksaktong 86 segundo (400 Γ— 60 Γ— 60 = 24), nang walang anumang karagdagang segundo. Kung nangyari ang gayong pagtalon, ang Unix time ay tumalon ng isang segundo, o nagbibilang ng dalawang segundo sa isa. Noong 86, nawawala ito ng 400 leap seconds.

Kaya't ang ating mga maling kuru-kuro ay kailangang dagdagan ng mga sumusunod:

  • Ang Unix time ay ang bilang ng mga segundo mula noong Enero 1, 1970 00:00:00 UTC minus leap seconds.
  • Kung maghihintay ka ng eksaktong isang segundo, ang oras ng Unix ay magbabago ng eksaktong isang segundo, maliban kung ang leap second ay tinanggal.

    Hanggang ngayon, ang mga segundo ay hindi kailanman naalis sa pagsasanay (at ang pagbagal ng pag-ikot ng Earth ay nangangahulugan na ito ay malabong mangyari), ngunit kung mangyari man ito, nangangahulugan ito na ang araw ng UTC ay magiging isang segundo na mas maikli. Sa kasong ito, ang huling segundo ng UTC (23:59:59) ay itatapon.

    Ang bawat araw ng Unix ay may parehong bilang ng mga segundo, kaya ang huling segundo ng Unix ng isang pinaikling araw ay hindi tumutugma sa anumang oras ng UTC. Narito kung ano ang hitsura nito, sa pagitan ng quarter-second:

    Mga Maling Paniniwala ng Programmer Tungkol sa Unix Time

    Kung magsisimula ka sa 23:59:58:00 UTC at maghintay ng isang segundo, ang Unix time ay uusad ng dalawang UTC segundo at ang Unix 101 timestamp ay hindi itatalaga sa sinuman.

  • Hindi na maibabalik ang oras ng Unix, hanggang sa maidagdag ang isang leap second.

    Nangyari na ito ng 27 beses sa pagsasanay. Sa pagtatapos ng araw ng UTC, may idaragdag na segundo sa 23:59:60. Ang Unix ay may parehong bilang ng mga segundo sa isang araw, kaya hindi ito maaaring magdagdag ng dagdag na segundo - sa halip ay kailangan nitong ulitin ang mga timestamp ng Unix para sa huling segundo. Narito kung ano ang hitsura nito, sa mga pagitan ng quarter-segundo:

    Mga Maling Paniniwala ng Programmer Tungkol sa Unix Time

    Kung magsisimula ka sa 23:59:60.50 at maghintay ng kalahating segundo, ang oras ng Unix babalik sa kalahating segundo, at ang Unix 101 timestamp ay tumutugma sa dalawang UTC segundo.

Malamang na hindi lang ito ang mga kakaiba sa panahon ng Unix - ang naalala ko lang kahapon.

Oras - napaka kakaibang bagay.

Pinagmulan: www.habr.com

Magdagdag ng komento