أعتذر
لباتريك ماكنزي .
استفسر
داني بالأمس عن حقائق غريبة حول وقت يونكس ، وذكّرت أنه يعمل أحيانًا بشكل غير مقصود.
هذه الحقائق الثلاث تبدو معقولة للغاية ومنطقية ، أليس كذلك؟
- وقت Unix هو عدد الثواني منذ 1 يناير 1970 ، 00:00:00 UTC.
- إذا انتظرت ثانية واحدة بالضبط ، فسيتغير وقت يونكس ثانية واحدة بالضبط.
- وقت يونكس لا ينتقل أبدًا إلى الوراء.
كل هذا غير صحيح.
لكن لا يكفي مجرد قول "كل هذا غير صحيح" دون توضيح
السبب . انظر أدناه للحصول على شرح. ولكن إذا كنت ترغب في التفكير لنفسك ، لا تقم بتمرير عقارب الساعة!
ساعة الطاولة من سبعينيات القرن السابع عشر. جمعها جون ليروكس. من مجموعة ويلكوم . نشرت تحت CC BYجميع المغالطات الثلاثة لها سبب واحد:
قفزة ثانية . إذا لم تكن معتادًا على الثواني الإضافية ، فإليك إشارة سريعة:
يتم تحديد وقت UTC حسب عاملين:
- الوقت الذري الدولي : قراءات متوسطية لمئات الساعات الذرية حول العالم. يمكننا قياس الثانية بالخصائص الكهرومغناطيسية للذرة ، وهذا هو أدق وقت قياس معروف للعلم.
- التوقيت العالمي ، استنادًا إلى دوران الأرض حول محورها. دورة كاملة - يوم واحد.
المشكلة هي أن هذين الرقمين لا يتطابقان دائمًا. إن دوران الأرض غير ثابت - إنه يتباطأ تدريجياً ، وبالتالي فإن اليوم في التوقيت العالمي يزداد. من ناحية أخرى ، الساعات الذرية دقيقة بشكل شيطاني وثابت لملايين السنين.
عندما ينفد التزامن مرتين ، تتم إضافة ثانية أو إزالتها في UTC لاستعادة التزامن. منذ عام 1972 ، أضافت خدمة
IERS (التي تدير هذه الحالة) 27 ثانية إضافية. كانت النتيجة 27 يومًا من التوقيت العالمي المنسق دائمًا 86،401 ثانية. من الناحية النظرية ، فإن ظهور يوم يدوم 86 399 ثانية (ناقص واحد) أمر ممكن. يتناقض كلا الخيارين مع الافتراض الأساسي لوقت يونكس.
يفترض وقت يونكس أن كل يوم يدوم 86،400 ثانية بالضبط (60 × 60 × 24 = 86،400) ، دون أي ثوانٍ إضافية. في حالة حدوث مثل هذه القفزة ، فإن وقت يونكس إما يقفز بعد ثانية ، أو عن طريق حساب ثانيتين في ثانية واحدة. اعتبارا من عام 2019 ، فإنه مفقود 27 ثانية قفزة.
لذلك يجب أن تكمل أخطائنا على النحو التالي:
- وقت يونكس هو عدد الثواني منذ 1 يناير 1970 00:00:00 UTC ناقص الثواني الكبيسة .
- إذا انتظرت ثانية واحدة بالضبط ، فسيتغير وقت يونكس ثانية واحدة بالضبط إذا لم يتم حذف الثانية الإضافية .
حتى الآن ، في الممارسة العملية ، لم تتم إزالة الثواني أبدًا (والتباطؤ في دوران الأرض يعني أن هذا غير مرجح) ، ولكن إذا حدث ذلك ، فهذا يعني أن يوم UTC كان أقصر من ثانية واحدة. في هذه الحالة ، يتم تجاهل الثانية الأخيرة من UTC (23:59:59).
يشتمل كل يوم من أيام Unix على نفس عدد الثواني ، لذلك لن يتوافق آخر يوم من أيام Unix مع أي وقت UTC. إليك ما يبدو عليه في فترات الربع الثاني:

إذا بدأت الساعة 23: 59: 58: 00 بالتوقيت العالمي وانتظر ثانية واحدة ، فإن وقت يونكس سوف يتقدم لثواني بالتوقيت العالمي المتفق عليه ، ولن يتم تخصيص الطابع الزمني لليونيكس 101 لأي شخص.
- لا يمكن أن يعود وقت يونكس إلى أن تتم إضافة ثانية إضافية .
لقد حدث هذا بالفعل 27 مرة في الممارسة. في نهاية اليوم ، أضف UTC ثانيةً 23:59:60. أيام Unix لها نفس عدد الثواني ، لذلك لا يمكنها إضافة ثانية إضافية - بدلاً من ذلك ، يجب عليك تكرار الطوابع الزمنية لـ Unix للثانية الأخيرة. إليك ما يبدو عليه في فترات الربع الثاني:

إذا بدأت الساعة 23: 59: 60.50 وانتظرت نصف ثانية ، فسوف يعود وقت يونكس لنصف ثانية ، بينما يتوافق الطابع الزمني الخاص بـ Unix 101 مع ثانيتين بالتوقيت العالمي المنسق.
ربما لا تكون هذه هي الشذوذات الوحيدة في وقت يونكس - فقط ما تذكرته بالأمس.
الوقت شيء غريب
جدا .