Ծրագրավորողների սխալ պատկերացումները Unix Time-ի մասին

ես ներողություն եմ խնդրում Պատրիկ Մաքքենզի.

Երեկ Դենի Ես հարցրի մի քանի հետաքրքիր փաստերի մասին Unix ժամանակի մասին, և ես հիշեցի, որ երբեմն այն աշխատում է բոլորովին ինտուիտիվ կերպով:

Այս երեք փաստերը չափազանց ողջամիտ և տրամաբանական են թվում, այնպես չէ՞:

  1. Յունիքս ժամանակը 1 թվականի հունվարի 1970-ից 00:00:00 UTC վայրկյանների թիվն է:
  2. Եթե ​​սպասեք ուղիղ մեկ վայրկյան, Unix-ի ժամանակը կփոխվի ուղիղ մեկ վայրկյանով:
  3. Unix-ի ժամանակը երբեք հետ չի շարժվում:

Սրանցից ոչ մեկը ճիշտ չէ:

Բայց բավական չէ պարզապես ասել՝ «Սրանցից ոչ մեկը ճիշտ չէ»՝ առանց բացատրելու: ինչու. Բացատրությունների համար տե՛ս ստորև: Բայց եթե ուզում եք ինքներդ մտածել, մի անցեք ժամացույցի նկարի կողքով:

Ծրագրավորողների սխալ պատկերացումները Unix Time-ի մասին
Սեղանի ժամացույց 1770-ական թվականներից։ Կազմել է Ջոն Լերուն։ Սկսած Ողջույնի հավաքածուներ. Հրատարակված է լիցենզիայի ներքո CC BY- ի կողմից

Երեք սխալ պատկերացումներն էլ ունեն մեկ պատճառ. նահանջ վայրկյաններ. Եթե ​​դուք ծանոթ չեք թռիչքային վայրկյաններին, ահա արագ հղում.

UTC ժամանակը որոշվում է երկու գործոնով.

  • Միջազգային ատոմային ժամանակԱշխարհի հարյուրավոր ատոմային ժամացույցների միջին ցուցանիշները: Երկրորդը կարող ենք չափել ատոմի էլեկտրամագնիսական հատկություններով, և սա գիտությանը հայտնի ժամանակի ամենաճշգրիտ չափումն է։
  • Համաշխարհային ժամանակ, հիմնված Երկրի պտույտի վրա սեփական առանցքի շուրջ։ Մեկ ամբողջական հեղափոխությունը մեկ օր է.

Խնդիրն այն է, որ այս երկու թվերը միշտ չէ, որ համընկնում են: Երկրի պտույտը հետևողական չէ. այն աստիճանաբար դանդաղում է, ուստի Համընդհանուր ժամանակի օրերն ավելի երկար են դառնում: Մյուս կողմից, ատոմային ժամացույցները սատանայական ճշգրիտ են և հաստատուն միլիոնավոր տարիների ընթացքում:

Երբ երկու անգամ համաժամանակցվում է, մեկ վայրկյան ավելացվում կամ հեռացվում է UTC-ից՝ դրանք նորից համաժամեցվելու համար: 1972 թվականից ծառայություն IERS (որն աշխատում է այս դեպքում) ավելացրել է 27 լրացուցիչ վայրկյան: Արդյունքը եղել է 27 UTC օր՝ 86 վայրկյան տևողությամբ։ Տեսականորեն հնարավոր է օր 401 վայրկյան տեւողությամբ (մինուս մեկ)։ Երկու տարբերակներն էլ հակասում են Unix ժամանակի հիմնարար ենթադրությանը:

Unix-ի ժամանակը ենթադրում է, որ յուրաքանչյուր օրը տևում է ուղիղ 86 վայրկյան (400 × 60 × 60 = 24), առանց հավելյալ վայրկյանների։ Եթե ​​նման թռիչք է տեղի ունենում, ապա Unix-ի ժամանակը կա՛մ ցատկում է մեկ վայրկյան, կա՛մ հաշվում է երկու վայրկյան մեկում։ 86 թվականի դրությամբ այն բացակայում է 400 նահանջ վայրկյան։

Այսպիսով, մեր սխալ պատկերացումները պետք է լրացվեն հետևյալ կերպ.

  • Յունիքս ժամանակը վայրկյանների թիվն է 1 թվականի հունվարի 1970-ից 00:00:00 UTC մինուս նահանջ վայրկյան.
  • Եթե ​​սպասեք ուղիղ մեկ վայրկյան, Unix-ի ժամանակը կփոխվի ուղիղ մեկ վայրկյանով, եթե նահանջ վայրկյանը չի հեռացվել.

    Մինչ այժմ գործնականում վայրկյանները երբեք չեն հանվել (և Երկրի պտույտի դանդաղումը նշանակում է, որ դա քիչ հավանական է), բայց եթե դա երբևէ տեղի ունենա, դա կնշանակի, որ UTC օրը մեկ վայրկյանով ավելի կկարճանա: Այս դեպքում UTC-ի վերջին վայրկյանը (23:59:59) հեռացվում է:

    Յուրաքանչյուր Unix օր ունի նույն թվով վայրկյաններ, ուստի կրճատված օրվա վերջին Unix վայրկյանը չի համապատասխանի որևէ UTC ժամանակի: Ահա թե ինչ տեսք ունի այն քառորդ վայրկյան ընդմիջումներով.

    Ծրագրավորողների սխալ պատկերացումները Unix Time-ի մասին

    Եթե ​​դուք սկսեք 23:59:58:00 UTC-ից և սպասեք մեկ վայրկյան, Unix-ի ժամանակը կանցնի երկու UTC վայրկյան, և Unix 101 ժամադրոշմը ոչ մեկին չի վերագրվի:

  • Unix ժամանակը երբեք չի կարող հետ գնալ, մինչև ավելացվի նահանջ վայրկյան.

    Գործնականում դա արդեն տեղի է ունեցել 27 անգամ։ UTC օրվա վերջում լրացուցիչ վայրկյան ավելացվում է 23:59:60-ին: Unix-ն ունի նույնքան վայրկյան մեկ օրվա ընթացքում, ուստի այն չի կարող լրացուցիչ վայրկյան ավելացնել, փոխարենը նա պետք է կրկնի Unix-ի ժամանակային դրոշմանիշները վերջին վայրկյանի համար: Ահա թե ինչ տեսք ունի այն քառորդ վայրկյան ընդմիջումներով.

    Ծրագրավորողների սխալ պատկերացումները Unix Time-ի մասին

    Եթե ​​սկսեք 23:59:60.50-ին և սպասեք կես վայրկյան, Unix-ի ժամանակը վերադառնում է կես վայրկյանով, իսկ Unix 101 ժամադրոշմը համապատասխանում է երկու UTC վայրկյանի:

Սրանք, հավանաբար, Unix-ի ժամանակների միակ տարօրինակությունները չեն, այն, ինչ ես հիշեցի երեկ:

Ժամանակ - շատ տարօրինակ բան.

Source: www.habr.com

Добавить комментарий