Unix කාලය ගැන ක්‍රමලේඛකයන්ගේ වැරදි වැටහීම්

මම සමාව ඉල්ලනවා පැට්‍රික් මැකෙන්සි.

ඊයේ ඩැනී මම Unix කාලය පිළිබඳ රසවත් කරුණු කිහිපයක් ගැන විමසුවෙමි, සමහර විට එය සම්පූර්ණයෙන්ම නොදැනුවත්වම ක්‍රියා කරන බව මට මතක් විය.

මෙම කරුණු තුන අතිශයින්ම සාධාරණ හා තර්කානුකූල බව පෙනේ, එසේ නොවේ ද?

  1. Unix කාලය යනු 1 ජනවාරි 1970 සිට 00:00:00 UTC තත්පර ගණනයි.
  2. ඔබ හරියටම තත්පරයක් රැඳී සිටියහොත්, Unix වේලාව හරියටම තත්පරයකින් වෙනස් වේ.
  3. Unix කාලය කිසි විටෙකත් පසුපසට ගමන් නොකරයි.

මේ කිසිවක් සත්‍ය නොවේ.

නමුත් පැහැදිලි කිරීමකින් තොරව “මේ කිසිවක් සත්‍ය නොවේ” යැයි කීම පමණක් ප්‍රමාණවත් නොවේ. ඇයි?. පැහැදිලි කිරීම් සඳහා පහත බලන්න. නමුත් ඔබට ඔබම සිතීමට අවශ්‍ය නම්, ඔරලෝසුවේ පින්තූරය පසුකර යන්න එපා!

Unix කාලය ගැන ක්‍රමලේඛකයන්ගේ වැරදි වැටහීම්
1770 ගණන්වල මේස ඔරලෝසුව. John Leroux විසින් සම්පාදනය කරන ලදී. සිට සුභ පැතුම් එකතු කිරීම්. බලපත්‍රය යටතේ ප්‍රකාශයට පත් කර ඇත CC BY

වැරදි වැටහීම් තුනටම එක හේතුවක් ඇත: පිම්ම තත්පර. ඔබ අධික තත්පර ගැන නොදන්නේ නම්, මෙන්න ඉක්මන් යොමුවක්:

UTC කාලය සාධක දෙකකින් තීරණය වේ:

  • ජාත්‍යන්තර පරමාණුක වේලාව: ලොව පුරා පරමාණුක ඔරලෝසු සිය ගණනකින් සාමාන්‍ය කියවීම්. පරමාණුවක විද්‍යුත් චුම්භක ගුණයෙන් අපට දෙවැන්න මැනිය හැකි අතර විද්‍යාව දන්නා කාලය පිළිබඳ වඩාත් නිවැරදි මිනුම මෙයයි.
  • ලෝක වේලාව, එහි අක්ෂය වටා පෘථිවියේ භ්රමණය මත පදනම්ව. එක් සම්පූර්ණ විප්ලවයක් යනු එක් දිනකි.

ගැටලුව වන්නේ මෙම අංක දෙක සැමවිටම නොගැලපීමයි. පෘථිවි භ්‍රමණය ස්ථීර නොවේ - එය ක්‍රමයෙන් මන්දගාමී වේ, එබැවින් විශ්ව වේලාවේ දින දිගු වේ. අනෙක් අතට, පරමාණුක ඔරලෝසු වසර මිලියන ගණනක් පුරා ඉතා නිවැරදි හා නියත වේ.

දෙවරක් සමමුහුර්තකරණයෙන් ඉවත් වූ විට, ඒවා නැවත සමමුහුර්ත කිරීමට UTC වෙතින් තත්පරයක් එකතු කිරීම හෝ ඉවත් කිරීම සිදු කෙරේ. 1972 සිට සේවය IERS (මෙම නඩුව ධාවනය කරන) අමතර තත්පර 27ක් එකතු කරන ලදී. එහි ප්‍රතිඵලය තත්පර 27ක කාලසීමාවක් සහිත UTC දින 86කි. න්‍යායාත්මකව, තත්පර 401 ක කාලසීමාවක් සහිත දිනයක් (සෘණ එකක්) හැකි ය. මෙම විකල්ප දෙකම Unix කාලය පිළිබඳ මූලික උපකල්පනයට පටහැනිය.

Unix කාලය උපකල්පනය කරන්නේ සෑම දිනකම හරියටම තත්පර 86 (400 × 60 × 60 = 24) කිසිදු අමතර තත්පරයකින් තොරව පවතින බවයි. එවැනි පැනීමක් සිදුවුවහොත්, යුනික්ස් වේලාව එක් තත්පරයක් පනිනවා, නැතහොත් තත්පර දෙකක් එකකින් ගණන් කරයි. 86 වන විට, එයට පිම්ම තත්පර 400ක් මග හැරී ඇත.

එබැවින් අපගේ වැරදි වැටහීම් පහත පරිදි අතිරේක කළ යුතුය:

  • Unix කාලය යනු 1 ජනවාරි 1970 සිට තත්පර ගණන 00:00:00 UTC අඩු පිම්ම තත්පර.
  • ඔබ හරියටම තත්පරයක් රැඳී සිටියහොත්, Unix කාලය හරියටම තත්පරයකින් වෙනස් වේ. පිම්ම තත්පරය ඉවත් කර නොමැති නම්.

    මෙතෙක්, ප්‍රායෝගිකව තත්පර කිසිදා ඉවත් කර නොමැත (සහ පෘථිවි භ්‍රමණය මන්දගාමී වීම යනු මෙය විය නොහැක්කකි), නමුත් එය කවදා හෝ සිදු වූවා නම්, එයින් අදහස් වන්නේ UTC දිනය තත්පරයක් කෙටි වන බවයි. මෙම අවස්ථාවේදී, UTC හි අවසාන තත්පරය (23:59:59) ඉවත දමනු ලැබේ.

    සෑම Unix දිනයකටම එකම තත්පර සංඛ්‍යාවක් ඇත, එබැවින් කෙටි කරන ලද දිනයක අවසාන Unix තත්පරය කිසිදු UTC වේලාවකට අනුරූප නොවේ. තත්පර කාර්තු-තත්පර කාල පරතරයකින් එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:

    Unix කාලය ගැන ක්‍රමලේඛකයන්ගේ වැරදි වැටහීම්

    ඔබ UTC 23:59:58:00 ට ආරම්භ කර තත්පරයක් රැඳී සිටින්නේ නම්, Unix කාලය UTC තත්පර දෙකක් ඉදිරියට යන අතර Unix 101 වේලා මුද්‍රාව කිසිවෙකුට පවරනු නොලැබේ.

  • Unix කාලය කිසිදා ආපසු යා නොහැක, පිම්ම තත්පරයක් එකතු වන තුරු.

    මෙය දැනටමත් ප්රායෝගිකව 27 වතාවක් සිදුවී ඇත. UTC දිනය අවසානයේදී, අමතර තත්පරයක් 23:59:60 ට එකතු වේ. Unix හට දිනකට එකම තත්පර සංඛ්‍යාවක් ඇත, එබැවින් එයට අමතර තත්පරයක් එක් කළ නොහැක - ඒ වෙනුවට එය අවසන් තත්පරය සඳහා Unix වේලා මුද්‍රා නැවත කිරීමට සිදුවේ. තත්පර කාර්තු-තත්පර කාල පරතරයකින් එය පෙනෙන්නේ කෙසේද යන්න මෙන්න:

    Unix කාලය ගැන ක්‍රමලේඛකයන්ගේ වැරදි වැටහීම්

    ඔබ 23:59:60.50 ට ආරම්භ කර තත්පර භාගයක් රැඳී සිටියහොත්, Unix වේලාව නැවත එනවා තත්පර භාගයකින්, සහ Unix 101 වේලා මුද්දරය UTC තත්පර දෙකකට අනුරූප වේ.

මේවා යුනික්ස් කාලයේ ඇති එකම අමුතුකම නොවේ - මට ඊයේ මතක ඇති දේ.

කාලය - හරිම බිසී අමුතු දෙයක්.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න