تحويل الطوابع الزمنية لنظام Unix إلى تواريخ يمكن قراءتها بواسطة الإنسان
يواجه المطورون ومسؤولو قواعد البيانات وأي شخص يعمل مع ملفات السجل أو واجهات برمجة التطبيقات (APIs) بانتظام طوابع زمنية لنظام Unix - أرقام طويلة مثل 1700000000 تمثل لحظة من الزمن. بدون محول، هذه الأرقام لا معنى لها بالنسبة لمعظم الناس. تقوم هذه الأداة بتحويل أي طابع زمني لنظام Unix على الفور إلى تاريخ ووقت يمكن قراءته، كما تقوم أيضًا بتحويل أي تاريخ مرة أخرى إلى الطابع الزمني لنظام Unix الخاص به.
ما هو الطابع الزمني يونكس؟
يقوم الطابع الزمني لنظام Unix بحساب عدد الثواني المنقضية منذ منتصف ليل 1 يناير 1970، بالتوقيت العالمي المنسق (UTC). تم اختيار هذه اللحظة، التي تسمى عصر يونكس، كنقطة مرجعية عند تطوير أنظمة تشغيل يونكس. كل ثانية تمر تضيف واحدة إلى العدد. يمثل الطابع الزمني 0 منتصف الليل تمامًا في 1 يناير 1970 بالتوقيت العالمي المنسق. يمثل الطابع الزمني 1700000000 14 نوفمبر 2023 الساعة 22:13:20 بالتوقيت العالمي المنسق.
يكمن جمال الطوابع الزمنية لنظام Unix في أنها لا تتوافق مع المنطقة الزمنية. يمثل الطابع الزمني نفس اللحظة الزمنية تمامًا بغض النظر عن مكان وجودك في العالم. عند التحويل إلى التوقيت المحلي، ينتج نفس الطابع الزمني قراءات مختلفة للساعة في طوكيو ونيويورك، ولكنها تشير إلى نفس اللحظة الفعلية.
كيفية استخدام المحول
لتحويل طابع زمني إلى تاريخ، قم بلصق رقم الطابع الزمني في الحقل العلوي. يظهر التاريخ والوقت بالتوقيت العالمي المنسق (UTC) والمعادل المحلي لديك على الفور. لتحويل تاريخ إلى طابع زمني، استخدم منتقي التاريخ في القسم السفلي وسيظهر الطابع الزمني المقابل على الفور.
ميلي ثانية مقابل ثانية
تستخدم بعض الأنظمة، وخاصة متصفحات الويب وتطبيقات JavaScript، المللي ثانية بدلاً من الثواني للطوابع الزمنية الخاصة بها. يُرجع استدعاء JavaScript Date.now() شيئًا مثل 1700000000000 — وهو رقم أكبر بحوالي 1000 مرة من الطابع الزمني المكافئ لنظام Unix بالثواني. إذا كان الرقم الذي لديك يتكون من ثلاثة عشر رقمًا تقريبًا، فمن المحتمل أن يكون بالمللي ثانية: اقسم على 1000 وأدخل النتيجة.
مشكلة عام 2038
قامت أنظمة يونكس المبكرة بتخزين الطوابع الزمنية كأعداد صحيحة موقعة 32 بت، والتي يمكن أن تحتوي على قيم تصل إلى 2,147,483,647. تتوافق هذه القيمة القصوى مع 19 يناير 2038 الساعة 03:14:07 بالتوقيت العالمي المنسق. ستتجاوز الأنظمة التي تخزن الطوابع الزمنية بأعداد صحيحة 32 بت في ذلك التاريخ، وهي مشكلة تسمى أحيانًا Y2K38. يمكن لأنظمة 64 بت الحديثة تخزين طوابع زمنية تتجاوز بكثير عام 292 مليارًا، مما يجعل هذه مشكلة فقط للبرامج القديمة التي لم يتم تحديثها.
الاستخدامات الشائعة
تظهر الطوابع الزمنية في ملفات السجل، وسجلات قاعدة البيانات، واستجابات واجهة برمجة التطبيقات (API)، ورؤوس ذاكرة التخزين المؤقت، وشهادات التشفير، وسياقات أخرى لا حصر لها. يساعد تحويلها إلى تواريخ قابلة للقراءة في تصحيح الأخطاء وتحليل البيانات وتدقيق الامتثال وأي موقف تحتاج إلى فهمه عند حدوث شيء ما.
لماذا تم اختيار عام 1970 كنقطة انطلاق؟
كان اختيار الأول من كانون الثاني (يناير) 1970 اختيارًا عمليًا في الأساس وليس تاريخًا ذا معنى في حد ذاته. تم تطوير يونكس في أواخر الستينيات وأوائل السبعينيات في مختبرات بيل، وكان المصممون بحاجة إلى نقطة مرجعية حديثة بما يكفي لإبقاء الأرقام قابلة للتحكم ولكن في وقت مبكر بما يكفي لتغطية العمر المحتمل لنظام التشغيل. كان التقريب إلى بداية عام 1970 أمرًا مريحًا بكل بساطة. وبعد عقود، أصبح هذا الاختيار الاعتباطي متأصلًا بعمق: فهو يكمن وراء كيفية تمثيل كل لغة برمجة وقاعدة بيانات ونظام تشغيل للوقت داخليًا، على الرغم من أن معظم المبرمجين لا يحتاجون أبدًا إلى التفكير في الأمر بشكل مباشر.
قراءة الطابع الزمني دون محول
مع القليل من الممارسة، يمكنك التحقق من الطابع الزمني في رأسك. القسمة على 31,536,000 (عدد الثواني في السنة العادية) تعطي عددًا تقريبيًا للسنوات منذ عام 1970 - طابع زمني مكون من عشرة أرقام يبدأ بـ 1.7 يتوافق تقريبًا مع عام 2023، على سبيل المثال، منذ عام 1970 بالإضافة إلى حوالي 53-54 عامًا يصل إلى هناك. يعد هذا التقدير الذهني التقريبي طريقة مفيدة لاكتشاف الطابع الزمني الخاطئ بشكل واضح، مثل الطابع الذي يكون مخالفًا بعامل 1000 لأنه كان في الواقع بالمللي ثانية، حتى قبل أن تصل إلى الآلة الحاسبة.
الطوابع الزمنية السلبية
نظرًا لأن الطابع الزمني لنظام Unix هو مجرد عدد موقع للثواني من العصر، يتم تمثيل التواريخ قبل 1 يناير 1970 كأرقام سالبة بدلاً من كونها غير مدعومة. على سبيل المثال، يمثل الطابع الزمني -86400 يومًا واحدًا بالضبط قبل العصر: 31 ديسمبر 1969. يتعامل هذا المحول مع القيم السالبة بنفس طريقة التعامل مع القيم الإيجابية، وهو أمر مفيد للعمل مع السجلات التاريخية أو البيانات التي تسبق عصر الحوسبة ولكنها لا تزال مخزنة في نموذج طابع زمني يونكس.
لماذا الطوابع الزمنية لا تتوافق مع المنطقة الزمنية؟
أكبر ميزة منفردة لتخزين اللحظة كطابع زمني لنظام Unix بدلاً من سلسلة تاريخ منسقة هي أنها تتجنب المناطق الزمنية بالكامل أثناء التخزين والحساب. يمثل الطابع الزمني لحظة فعلية واحدة بالضبط، ولا تتم ترجمته إلا إلى تاريخ التقويم المحلي ووقت الساعة في اللحظة التي يتم عرضها فيها على الشخص. ولهذا السبب تقوم قواعد البيانات وواجهات برمجة التطبيقات وملفات السجل بتخزين الطوابع الزمنية بشكل كبير بدلاً من التواريخ المحلية المنسقة مسبقًا: يمكن لخادمين في مناطق زمنية مختلفة مقارنة الاختلافات بين الطوابع الزمنية وفرزها وحسابها بثقة تامة، ويحتاجان فقط إلى التحويل إلى توقيت محلي يمكن قراءته بواسطة الإنسان في الخطوة الأخيرة، تمامًا كما يفعل هذا المحول عندما يعرض كلاً من التوقيت العالمي المنسق (UTC) والمعادل المحلي الخاص بك جنبًا إلى جنب.
التصحيح مع الطوابع الزمنية
يلجأ المطورون إلى محول مثل هذا باستمرار أثناء تصحيح الأخطاء. إن سجل أخطاء الخادم المختوم بالرقم 1700000000 لا معنى له في لمحة واحدة، ولكن تحويله يخبرك على الفور بما إذا كان الخطأ قد حدث أثناء ساعات العمل، أو بين عشية وضحاها، أو في اللحظة المحددة لانطلاق عملية النشر - غالبًا ما تكون أسرع طريقة لربط تقرير الخطأ بالتغيير الذي تسبب فيه. استجابات واجهة برمجة التطبيقات (API)، وأعمدة تدقيق قاعدة البيانات، ورؤوس انتهاء صلاحية ذاكرة التخزين المؤقت، جميعها تقوم عادةً بتخزين الطوابع الزمنية بدلاً من التواريخ المنسقة لنفس السبب الذي يجعل محركات التخزين تفضلها: حيث يقوم عدد عادي بفرز الأرقام ومقارنتها وحسابها بشكل صحيح دون أي غموض في اللغة أو التنسيق، ويحتاج فقط إلى ترجمته إلى تاريخ مناسب للإنسان في خطوة العرض النهائية، وهي بالضبط المهمة التي تقوم بها هذه الأداة.
خاص
يتم تشغيل كل شيء في متصفحك باستخدام كائن التاريخ المدمج في JavaScript، بحيث يكون التحويل فوريًا في كلا الاتجاهين ولا يتم إرسال أي طابع زمني أو تاريخ تدخله إلى الخادم، أو تسجيله أو مشاركته.
الأسئلة الشائعة حول الطابع الزمني لنظام Unix
- ما هو الطابع الزمني يونكس؟
- الطابع الزمني لنظام Unix هو رقم يمثل عدد الثواني المنقضية منذ 1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي (عصر Unix). يتم استخدامه عالميًا في الحوسبة لتمثيل النقاط الزمنية دون غموض المنطقة الزمنية.
- ما هي مشكلة عام 2038؟
- الأنظمة القديمة التي تخزن الطوابع الزمنية لنظام Unix كأعداد صحيحة موقعة 32 بت يمكنها فقط تمثيل التواريخ حتى 19 يناير 2038. لا تحتوي أنظمة 64 بت الحديثة على هذا القيد.
- كيف أقوم بتحويل ميلي ثانية؟
- تستخدم بعض الأنظمة المللي ثانية بدلاً من الثواني. اقسم الطابع الزمني بالمللي ثانية على 1000 لتحويله إلى ثوانٍ قبل إدخاله هنا.