طوابع Unix الزمنية بلا صداع
اسأل ثلاثة مطورين كم الساعة، فقد تحصل على ثلاث إجابات تبعًا لموقع كل منهم. واسأل طابع Unix الزمني، فتحصل على رقم واحد بالضبط، هو نفسه للجميع على الكوكب. وذلك العدد الصحيح الواحد هو سبب كون وقت العصر (epoch) يقوم بهدوء وراء كل ملف سجلات وصف قاعدة بيانات واستجابة واجهة برمجة تطبيقات ستلمسها يومًا. وتشرح هذه الصفحة ما يعنيه ذلك الرقم، وكيف تقرأه في الاتجاهين، وأين يميل إلى إيقاع الناس.

ما هو وقت Unix فعلًا
طابع Unix الزمني هو عدد الثواني المنقضية منذ الساعة 00:00:00 بالتوقيت العالمي المنسق في الأول من يناير 1970، دون احتساب الثواني الكبيسة. وتلك اللحظة تُسمى العصر (epoch)، وقد اختارها مهندسو Unix الأوائل ببساطة لأنها تاريخ مستدير مريح للعدّ منه. وعند العصر تكون القيمة 0 بالضبط. وكل ثانية منذ ذلك الحين تضيف واحدًا، فالرقم لا يفتأ يكبر. والتواريخ السابقة لعام 1970 صالحة تمامًا أيضًا، وتُعبَّر عنها بأعداد صحيحة سالبة.
وسترى هذا المفهوم يُسمى أيضًا وقت POSIX أو، بشكل فضفاض، وقت العصر. وأيًا كانت التسمية، فالآلية نفسها: عدّاد ثوانٍ واحد متزايد أبدًا. ولأنه عدد صحيح بسيط لا سلسلة منسّقة، يمكن للحاسوب تخزينه في بضعة بايتات ومقارنة اثنين منه بعملية طرح واحدة.
الثواني والميلي ثانية وما إليها
يعدّ وقت Unix الكلاسيكي ثوانٍ كاملة، ما يعطي الرقم المألوف من عشرة أرقام الذي تراه اليوم. لكن كثيرًا من البيئات يحتاج إلى دقة أعلى. فـ JavaScript، مثلًا، تعمل بالميلي ثانية، منتجة قيمة من ثلاثة عشر رقمًا، وبعض الأنظمة يمضي أبعد إلى الميكرو ثانية أو النانو ثانية. وقاعدة موثوقة تُسترشد بها: الرقم المكوّن من عشرة أرقام ثوانٍ، والمكوّن من ثلاثة عشر رقمًا ميلي ثانية. فإن هبط تاريخك المحوّل قرب عام 1970 حين كنت تتوقع اليوم الحاضر، فأنت شبه مؤكد أدخلت ميلي ثانية في حقل ثوانٍ، أو العكس. ويكتشف محوّلنا حجم القيمة تلقائيًا فنادرًا ما تضطر إلى التخمين.
لماذا يعتمد عليه المطورون
الفائدة الكبرى أن الطابع الزمني محايد تجاه المنطقة الزمنية. فالعدد الصحيح 1735689600 يشير إلى اللحظة نفسها في طوكيو وبرلين وساو باولو. وتخزين ذلك الرقم بدلًا من سلسلة محلية منسّقة يعني أنك لا تحتاج أبدًا إلى التساؤل عن أي ساعة تعود إليها قيمة. والفرز سهل أيضًا، لأن الترتيب الزمني ليس سوى ترتيب عددي، فيفرز فهرس قاعدة بيانات على عمود طابع زمني الأحداث بشكل صحيح دون أي تحليل. والحساب نظيف بالقدر نفسه: فالفجوة بين حدثين عملية طرح واحدة، وإضافة يوم هي إضافة 86400. وهذه الخصائص هي بالضبط سبب لجوء السجلات والرموز وذواكر التخزين المؤقت وطوابير الرسائل جميعًا إلى وقت العصر.
التحويل في الاتجاهين
الانتقال من طابع زمني إلى تاريخ مقروء للإنسان يعني أخذ عدد الثواني وإسقاطه على تقويم، ثم تنسيق ذلك في أي منطقة زمنية تهتم بها. وفي الاتجاه الآخر، تأخذ سنة وشهرًا ويومًا ووقتًا، وتقرر أي منطقة زمنية عُبِّر عنها بها، وتطويها عائدًا إلى ثوانٍ منذ العصر. وتقوم أداتنا بكلا الاتجاهين على الفور وبالكامل في متصفحك، فلا يغادر شيء تلصقه جهازك. الصق رقمًا لفكّ ترميزه، أو اختر تاريخًا لترميزه، واقرأ النتيجة بالتوقيت العالمي المنسق وبتوقيتك المحلي في اللحظة نفسها.

التوقيت العالمي المنسق مقابل المحلي، الفخ الكلاسيكي
الطابع الزمني نفسه لا منطقة زمنية له؛ فهو دائمًا مرتكز على التوقيت العالمي المنسق. ولا يظهر الالتباس إلا حين تعرضه. فإن حوّلت 1700000000 وعرضت شاشتك ساعة مسائية بينما يرى زميل في بلد آخر ساعة بعد الظهر، فلا شيء معطوب، فكلاكما ينظر إلى اللحظة نفسها مُصاغة بساعات محلية مختلفة. وتتسلل الأخطاء حين تقرأ الشيفرة تاريخًا محليًا كأنه بالتوقيت العالمي المنسق، أو تطبع وقت ساعة الحائط دون تسجيل الإزاحة. والعادة الآمنة هي تخزين ونقل التوقيت العالمي المنسق، وتطبيق الإزاحة المحلية في اللحظة الأخيرة فقط، حين تعرض القيمة لشخص. وعند الشك، قارن مع سطر التوقيت العالمي المنسق في المحوّل لا مع المحلي.
مشكلة عام 2038
خزّن كثير من الأنظمة القديمة وقت Unix في عدد صحيح موقّع من 32 بتًا. وينفد ذلك الحقل من المساحة بعد ثانية واحدة من الساعة 03:14:07 بالتوقيت العالمي المنسق في 19 يناير 2038، حين يفيض العدّاد ويلتف إلى رقم سالب، فقد يرتد بالتواريخ إلى عام 1901. وهي من العائلة نفسها لمشكلة Y2K. والخبر السار أن أنظمة التشغيل واللغات الحديثة انتقلت إلى حد كبير إلى طوابع زمنية من 64 بتًا، لن تفيض لنحو 292 مليار سنة، لذا فهي بالنسبة للشيفرة الجديدة طُرفة تاريخية تستحق المعرفة لا حالة طوارئ.
لمزيد من المساعِدات القائمة على المتصفح، انظر أدوات المطورين لدينا، وإن احتجت إلى التعامل مع الأرقام نفسها، فإن الحاسبات على بُعد نقرة.
الأسئلة الشائعة
ما هو طابع Unix الزمني؟
هو عدد الثواني منذ الساعة 00:00:00 بالتوقيت العالمي المنسق في الأول من يناير 1970، دون احتساب الثواني الكبيسة. وتلك اللحظة الابتدائية تُسمى العصر، والعدّ يتزايد فقط مع الوقت.
لماذا يتحول رقمي إلى تاريخ قرب عام 1970؟
الأرجح أنك خلطت بين الثواني والميلي ثانية. فالرقم المكوّن من عشرة أرقام ثوانٍ والمكوّن من ثلاثة عشر رقمًا ميلي ثانية. وإدخال ميلي ثانية في حقل ثوانٍ يقسم الوقت الظاهر على نحو ألف، فيهبط بك قرب العصر.
هل لطابع Unix الزمني منطقة زمنية؟
لا. القيمة دائمًا مرتكزة على التوقيت العالمي المنسق. ولا تدخل المنطقة الزمنية الصورة إلا حين تعرض الطابع الزمني كتاريخ مقروء للإنسان، ولهذا يمكن للرقم نفسه أن يُظهِر أوقات ساعة حائط مختلفة لأشخاص مختلفين.
كيف أحوّل تاريخًا عائدًا إلى طابع زمني؟
زوّد السنة والشهر واليوم والوقت، وقرر أي منطقة زمنية عُبِّر عنها بها، فتطويها الأداة إلى ثوانٍ منذ العصر. ويمكنك القيام بالاتجاهين على هذه الصفحة على الفور في متصفحك.
ما هي مشكلة عام 2038؟
الأنظمة التي تخزّن وقت Unix في عدد صحيح موقّع من 32 بتًا تفيض بعد ثانية واحدة من الساعة 03:14:07 بالتوقيت العالمي المنسق في 19 يناير 2038. وتتجنب الطوابع الزمنية الحديثة من 64 بتًا ذلك لمليارات السنين، لذا فمعظم البرمجيات الحالية غير متأثرة.
هل تُرسَل بياناتي إلى خادم؟
لا. يجري التحويل بالكامل في متصفحك، فأي طابع زمني أو تاريخ تلصقه يبقى على جهازك الخاص.
