Miskonsepsyon pwogramè yo sou tan Unix

Mwen mande padon Patrick McKenzie.

Danny Mwen te mande sou kèk reyalite enteresan sou tan Unix, epi mwen sonje ke pafwa li travay konplètman unintuitively.

Twa reyalite sa yo sanble trè rezonab ak lojik, pa vre?

  1. Tan Unix se kantite segonn depi 1ye janvye 1970 00:00:00 UTC.
  2. Si w tann egzakteman yon segonn, tan Unix la ap chanje pa egzakteman yon segonn.
  3. Tan Unix pa janm deplase bak.

Okenn nan sa a se vre.

Men, li pa ase tou senpleman di, "Okenn nan sa a se vre," san yo pa eksplike. poukisa. Gade pi ba a pou eksplikasyon. Men, si ou vle panse pou tèt ou, pa defile sou foto revèy la!

Miskonsepsyon pwogramè yo sou tan Unix
Revèy tab soti nan ane 1770 yo. Konpile pa John Leroux. Soti nan Byenvini koleksyon yo. Pibliye anba lisans CC BY

Tout twa move konsepsyon gen yon rezon: segonn kwasans. Si ou pa abitye ak segonn leap, isit la se yon referans rapid:

Tan UTC detèmine pa de faktè:

  • Tan Atomik Entènasyonal: Mwayèn lekti nan plizyè santèn revèy atomik atravè mond lan. Nou ka mezire dezyèm nan pa pwopriyete elektwomayetik yon atòm, e sa a se mezi ki pi presi nan tan ke syans konnen.
  • Tan Mondyal, ki baze sou wotasyon Latè alantou pwòp aks li. Yon revolisyon konplè se yon sèl jou.

Pwoblèm lan se ke de nimewo sa yo pa toujou matche ak. Wotasyon Latè a pa konsistan - li piti piti ralanti, kidonk jou yo nan Tan Inivèsèl vin pi long. Nan lòt men an, revèy atomik yo devilishly egzat ak konstan pandan plizyè milyon ane.

Lè de fwa tonbe nan senkronizasyon, yo ajoute oswa retire yon dezyèm nan UTC pou fè yo tounen nan senkronizasyon. Depi 1972 sèvis IERS (ki kouri ka sa a) te ajoute 27 segonn supplémentaires. Rezilta a se te 27 jou UTC ak yon dire 86 segonn. Teyorikman, yon jou ak yon dire 401 segonn (mwens yon sèl) se posib. Tou de opsyon kontredi sipozisyon fondamantal tan Unix.

Tan Unix sipoze ke chak jou dire egzakteman 86 segonn (400 × 60 × 60 = 24), san okenn segonn adisyonèl. Si yon so konsa rive, Lè sa a, tan Unix swa sote yon segonn, oswa konte de segonn nan yon sèl. Kòm nan 86, li manke 400 segonn kwasans.

Se konsa, move konsepsyon nou yo bezwen konplete jan sa a:

  • Tan Unix se kantite segonn depi 1ye janvye 1970 00:00:00 UTC mwens segonn kwasans.
  • Si w tann egzakteman yon segonn, tan Unix ap chanje pa egzakteman yon segonn, sof si yo te retire segonn leap la.

    Jiska kounye a, segonn pa janm te retire nan pratik (epi ralantisman an nan wotasyon Latè a vle di sa a se fasil), men si li te janm rive, sa ta vle di ke jou UTC a ta vin yon segonn pi kout. Nan ka sa a, dènye segonn UTC (23:59:59) yo jete.

    Chak jou Unix gen menm kantite segonn, kidonk dènye segonn Unix nan yon jou ki pi kout la pap koresponn ak okenn lè UTC. Men ki sa li sanble, nan entèval trimès-dezyèm:

    Miskonsepsyon pwogramè yo sou tan Unix

    Si w kòmanse a 23:59:58:00 UTC epi tann yon segonn, tan Unix ap avanse de segonn UTC epi yo p ap bay pèsonn mak tan Unix 101 la.

  • Tan Unix pa janm ka tounen, jiskaske yon segonn leap ajoute.

    Sa a te deja rive 27 fwa nan pratik. Nan fen jounen UTC a, yo ajoute yon segonn adisyonèl a 23:59:60. Unix gen menm kantite segonn nan yon jounen, kidonk li pa ka ajoute yon segonn siplemantè - olye li oblije repete timestamps Unix yo pou dènye segonn lan. Men ki sa li sanble, nan entèval trimès-dezyèm:

    Miskonsepsyon pwogramè yo sou tan Unix

    Si ou kòmanse nan 23:59:60.50 epi tann mwatye yon segonn, tan an Unix retounen pa mwatye yon segonn, ak timestamp Unix 101 koresponn ak de segonn UTC.

Sa yo se pwobableman pa bagay ki pa sèlman nan tan Unix - jis sa mwen sonje yè.

Tan - trè bagay etranj.

Sous: www.habr.com

Add nouvo kòmantè