باختصار: طابع Unix الزمني هو عدد الثواني المنقضية منذ منتصف ليل 1 يناير 1970 بتوقيت UTC. تستخدمه السجلّات وواجهات API لأنه بلا لبس ومستقلّ عن المنطقة الزمنية. أمران يوقعان في الخطأ: التمييز بين الثواني والملّي ثانية، ونسيان أن الرقم الخام دائمًا بتوقيت UTC حتى تحوّله إلى منطقة محلية.

عند مقارنة مدخلات بين خوادم، يسهل التفكير في عدد صحيح أكثر من تاريخ منسّق: لا منطقة زمنية، ولا إعداد محليّ، ولا لبس بشأن التوقيت الصيفي. لكن هذه الصيغة الخام نفسها هي سبب إمكان إساءة قراءة طابع تائه.

لماذا تبدأ الطوابع من 1970

حقبة Unix هي منتصف ليل 1 يناير 1970 بتوقيت UTC، اختارها مطوّرو Unix الأوائل في Bell Labs كنقطة مرجعية بسيطة وثابتة. كل طابع Unix زمني هو مجرّد عدّ للثواني منذ تلك اللحظة، ما يجعل الحساب — «كم بين هذين الحدثين؟» — طرحًا بسيطًا.

ثوانٍ أم ملّي ثانية؟

هذا أكثر الأخطاء شيوعًا عند قراءة السجلّات. قاعدة عملية: إن كان للقيمة أكثر من 11 رقمًا (أكبر من نحو 10¹¹) فهي شبه مؤكّدة بالملّي ثانية. الطابع الحالي بالثواني نحو 1.7 مليار (عشرة أرقام)؛ اللحظة نفسها بالملّي ثانية نحو 1.7 تريليون (ثلاثة عشر رقمًا). أعطِ قيمة بالملّي ثانية لمحلِّل يقرأ بالثواني، فتحصل على تاريخ يقع بعد عشرات آلاف السنين.

الطابع دائمًا بتوقيت UTC

يرمّز طابع Unix لحظة مطلقة، لا وقت ساعة حائط محليًا. لعرضه لإنسان تطبّق منطقة زمنية: الرقم نفسه هو «14:30 في لندن» و«09:30 في نيويورك». والتحويل النظيف في الاتجاهين يعني التصريح بالمنطقة المقصودة: يستخدم المحوّل الجيّد قاعدة مناطق IANA القياسية وواجهة Intl.DateTimeFormat ليكون الإزاحة (بما فيها التوقيت الصيفي) صحيحة لذلك التاريخ.

ISO 8601 لكل ما تخزّنه أو تشاركه

حين يجب أن يكون الطابع مقروءًا للإنسان وآمنًا للآلة معًا، استخدم ISO 8601: 2024-03-15T14:30:00.000Z. تفصل T بين التاريخ والوقت، وتدلّ Z على UTC. يُرتَّب صحيحًا كنصّ عادي ويزيل حيرة الثواني مقابل الملّي ثانية عن القارئ التالي.

ملاحظة 2038

الأنظمة التي تخزّن الطابع كعدد صحيح موقّع بـ 32 بت تفيض في 19 يناير 2038. انتقلت معظم المنصّات الحديثة إلى وقت 64 بت، لكن معرفة ذلك مفيدة عند مقابلة نظام قديم أو عمود قاعدة بيانات ثابت العرض.

سير عمل عملي

  1. انسخ القيمة الخام من سجلّك أو من استجابة الـ API.
  2. الصقها في محوّل الطوابع الزمنية، الذي يكشف تلقائيًا الثواني مقابل الملّي ثانية ويعرض التاريخ بالمنطقة المختارة.
  3. قبل الطرح، حوّل الحدثين اللذين تقارنهما إلى المنطقة نفسها (أو أبقِهما بتوقيت UTC).
  4. خزّن أو شارك النتيجة بصيغة ISO 8601 لئلا تعيد إدخال اللبس. أرفقها بـ عدّاد الأحرف إن كنت تنظّف مقتطف سجلّ لتذكرة.

أخطاء شائعة يجب تجنّبها

  • خلط الثواني والملّي ثانية في المقارنة نفسها.
  • افتراض أن الطابع الخام بالوقت المحلي أصلًا.
  • مقارنة حدثين معروضين بمنطقتين زمنيتين مختلفتين.
  • استخدام حقول وقت 32 بت ثابتة العرض لا تصمد حتى 2038.