العربية

أدوات المطور · محول الطابع الزمني يونكس

الطوابع الزمنية السلبية لنظام Unix: كيفية تمثيل التواريخ قبل 1970

· كيف يعمل

الطوابع الزمنية وقت يونكس تنسيقات البيانات

خط زمني يمتد إلى اليسار من حقبة 1970 إلى قيم سلبية
الرسم التوضيحي المتجه الأصلي ToolAcre

يتم احتساب وقت Unix للأمام من 1970، ولكنه يعد للخلف أيضًا. يشرح هذا المنشور ما تعنيه الحقبة السلبية، وكيف تصبح −1 هي الثانية الأخيرة من 1969، وحيث تنكسر الأنظمة التي تفترض القيم الإيجابية.

تاريخ الميلاد بعلامة الطرح — المستخدم المولود في 1965 مخزن كعدد صحيح سالب، والرمز الذي تعامل معه على أنه خطأ

يمكن أن يحتوي السجل الخاص بشخص ولد قبل 1970 على طابع زمني سلبي لنظام Unix. يؤدي رفض كل علامة ناقص إلى تحويل خيار التمثيل إلى خطأ فقدان البيانات. يقبل المحلل اللغوي ToolAcre إشارة اختيارية، ويضع `fromEpoch` علامة على قيمة مللي ثانية مفسرة أقل من الصفر على أنها `beforeEpoch` بدلاً من التعامل معها على أنها غير صالحة.

تضيف الشاشة بعد ذلك ملاحظة توضح أن اللحظة تسبق عصر Unix. وهذا أقوى من عرض التاريخ بصمت لأنه يبقي العلامة غير العادية مرئية للمراجع. إذا كان المخطط الأولي يحظر السلبيات، فإن الفشل ينتمي إلى هذا المخطط أو الترحيل، وليس إلى العملية الحسابية التي تحسبها الخرائط على جانبي الصفر.

الأعداد الصحيحة ذات الإشارة والعصر - لماذا تم توقيع time_t، وما يتوافق مع −1 و −86400

الصفر هو 1970-01-01T00:00:00.000Z. تثبت اختبارات المستودع أن −1 الثانية هي اللحظة السابقة مباشرة، `1969-12-31T23:59:59.000Z`. وبالمثل، −86,400 ثانية هي POSIX يوم واحد ثابت قبل الصفر. الحساب الموقع يجعل المحور مستمرًا بدلاً من طلب فترة ثانية للسجلات الأقدم.

ينسب المخطط التفصيلي التخزين الموقع إلى `time_t`، ولكن هذا الرمز لا يحدد سجل التصميم أو النوع المستخدم بواسطة كل نظام أساسي. ويكفي دليلها الأضيق: JavaScript يمكن أن تكون الأرقام سالبة، ويستخدم الاكتشاف الحجم المطلق، ويمكن للتاريخ تنسيق النتيجة. قم بوصف النوع المعلن لحقل الإنتاج بشكل منفصل عن المدخلات المقبولة للمحول.

وقعت العصر الحسابي حول الصفر، دون أن ندعي لماذا اختار كل مرة نوعه

تحتفظ القيم السالبة بنفس وحدة التمييز مثل القيم الإيجابية. `−1000` ثانية تشير إلى 1,000 ثانية قبل العصر، في حين أن `−1000` مللي ثانية تشير إلى ثانية واحدة فقط قبله. يعامل الاكتشاف التلقائي كليهما على أنهما ثواني لأن حجمهما أقل من 10¹¹، لذا يتطلب العدد القصير بالمللي ثانية قبل العصر تحديدًا صريحًا بالمللي ثانية.

وهذا فشل ملموس في الفولكلور الذي يعتمد على عدد الأرقام. المطور الذي يرى علامة الطرح وأربعة أرقام لا يمكنه استنتاج الوحدة من المظهر. استخدم العقد المصدر، واختر المحدد وافحص ملاحظة الوحدة. تعد قاعدة حجم ToolAcre هي القاعدة الافتراضية للبيانات النموذجية، وليست بديلاً للبيانات التعريفية على القيم التاريخية القريبة من 1970.

عندما تفشل القيم السالبة - الأنظمة التي تستخدم −1 كحارس، والتخزين غير الموقع، ومنتقيات التاريخ التي يتم تثبيتها، واللغات التي ترفضها

خارج المحول، يتم أحيانًا حجز `−1` كحارس للقيمة المفقودة، ولا يمكن للعمود غير الموقع الاحتفاظ بأي لحظة سلبية. هذه هي إمكانيات التصميم الشائعة، لكن المستودع لا يمكنه التصديق على كيفية تصرف قاعدة بيانات معينة أو منتقي التاريخ أو اللغة. اختبر الحد الفعلي قبل نقل تواريخ الأرشيف من خلاله.

يحتوي المسبار المفيد على ثلاث قيم: فارغة أو العلامة المفقودة الموثقة، −1، وتاريخ أقدم بشكل واضح. إذا اختفى −1 مع بقاء القيمة الأقدم، فإن المعالجة الخافرة متورطة؛ إذا فشلت كافة السلبيات، فحص النوع والتحقق من الصحة. لا "تصلح" العَرَض بإضافة 1970 سنة أو أخذ قيمة مطلقة، لأن كليهما ينشئان لحظات مختلفة.

مثال عملي: تحويل −14182940 — الحساب إلى تاريخ 1969 يوليو في UTC وفي منطقة محلية غرب غرينتش

لمدة −14,182,940 ثانية، ابدأ من العصر وانتقل للخلف 164 أكمل 86,400-أيام ثانية، مع ترك 13,340 ثانية. والباقي هو 3 ساعة و42 دقيقة و20 ثانية. قراءة UTC الناتجة هي `1969-07-20T20:17:40.000Z`، لحظة تم اختيارها هنا خصيصًا لهذه المقالة.

قد تظهر القراءة المحلية غرب UTC ساعة حائط سابقة أو حتى تاريخًا آخر، ولكن النتيجة الدقيقة تعتمد على منطقة المتصفح والقواعد الدولية. اقرأها من اللوحة بدلاً من نشر إجابة عالمية. التحقق الثابت هو الصف ISO؛ الصف المحلي عبارة عن تعليق توضيحي بيئي لنفس العدد السلبي.

مثال عملي: تحويل −14,182,940 باستخدام حساب UTC يمكن التحقق منه

ToolAcre يتحقق من قيمته المفسرة مقابل ±8.64×10¹⁵ مللي ثانية، النطاق الزمني المذكور في المصدر. كما يثبت أيضًا تحويل −2,208,988,800 ثانية إلى `1900-01-01T00:00:00.000Z`. توضح هذه الحقائق أن المسار يصل قبل 1970 بوقت طويل دون الإشارة إلى أن كل نظام تخزين يمكنه حمل نفس النطاق.

يحتوي الحقل ذو التوقيع 32 بت على فاصل رياضي أضيق من JavaScript التاريخ، لكن المحول لا يفحص عرض الحقل عند لصق رقم. الحفاظ على نوع المصدر في التدقيق. يوضح التحويل الناجح للمتصفح إمكانية التمثيل هنا، وليس التنقل الآمن عبر البرامج الثابتة أو أعمدة SQL أو البروتوكولات الثنائية في مكان آخر.

النطاق الزمني للمحول معروف؛ تعتمد حدود البت الخارجية 32 على نوع التخزين الخاص بها

تحويل العد إلى JavaScript التاريخ لا يؤدي إلى إعادة بناء التقويم المدني المطبوع بالفعل في كل مكان منذ قرون مضت. يستخدم التنفيذ نموذج تاريخ النظام الأساسي ويعيد تمثيل ISO؛ فهو لا يحتوي على محدد تقويم تاريخي أو أرشيف محلي أو مصدر وثائقي لإصلاحات التقويم. هذه الادعاءات غائبة عمدا.

بالنسبة لسجلات البرامج الحديثة، قد يظل تمثيل الآلة الاستباقية هو العقد الذي تحتاجه تمامًا. بالنسبة لعلم الأنساب أو التاريخ القانوني أو النسخ الأرشيفي، احتفظ بالتاريخ المكتوب الأصلي وسياق التقويم الخاص به جنبًا إلى جنب مع أي حقبة مشتقة. لا ينبغي للرقم المناسب القابل للفرز أن يمحو عدم اليقين الذي لا يمكن للتحويل حله.

إن مطالبات تاريخ التقويم تقع خارج دليل هذا المحول

السالب هو اتجاه على محور العصر، وليس فئة خطأ. ToolAcre يوزعها، ويطبق نفس قواعد الثواني أو المللي ثانية من حيث الحجم، ويضع علامة على النتيجة كما كانت قبل العصر. يتيح هذا السلوك للمراجع التمييز بين اللحظة القديمة المشروعة وفشل التخزين الحارس أو غير الموقع في مكان آخر.

عند تدقيق بيانات ما قبل 1970، اذكر الوحدة ونوع المصدر واصطلاح القيمة المفقودة قبل تفسير الإشارة. ثم قارن نتيجة ISO بسجل معروف. العلامة وحدها هي عملية حسابية ذات معنى؛ يحدد المخطط المحيط ما إذا كان المنتج يقصد تلك العملية الحسابية أو يستخدم نفس الرقم كقيمة تحكم.