🕐
← العودة للأدلة

ما هو الطابع الزمني لنظام Unix؟ الدليل الشامل

· وسوم: unix-timestamp, epoch, linux-time, 2038-problem, utc, time-conversion

ما هو الطابع الزمني لنظام Unix؟

الطابع الزمني لنظام Unix (المعروف أيضًا باسم وقت POSIX أو وقت العصر) هو نظام لتتبع الوقت يحسب عدد الثواني التي انقضت منذ عصر Unix — 00:00:00 UTC في 1 يناير 1970 — باستثناء الثواني الكبيسة.

على عكس التواريخ القابلة للقراءة البشرية التي تختلف حسب المنطقة الزمنية ("19 يوليو 2026، 3:30 مساءً EST")، فإن الطابع الزمني لنظام Unix هو عدد صحيح واحد يمثل نفس اللحظة في كل مكان على الأرض. على سبيل المثال، الطابع الزمني 1785292800 يقابل لحظة محددة بغض النظر عما إذا كنت في نيويورك أو لندن أو طوكيو.

الطوابع الزمنية لنظام Unix هي العمود الفقري لمعالجة الوقت في الحوسبة الحديثة. أنظمة التشغيل ولغات البرمجة وقواعد البيانات وأنظمة الملفات جميعها تعتمد على هذا التمثيل الصحيح البسيط تحت الغطاء.

عصر Unix: لماذا 1 يناير 1970؟

لم يكن اختيار 1 يناير 1970 "كعصر" (نقطة البداية) اعتباطيًا. عدة اعتبارات عملية أدت إلى هذا القرار:

  • تطوير Unix المبكر: تم تطوير نظام التشغيل Unix في مختبرات Bell في أواخر الستينيات وأوائل السبعينيات. بحلول الوقت الذي تم فيه توحيد نظام الوقت في أوائل السبعينيات، كان 1 يناير 1970 نقطة مرجعية حديثة ونظيفة.
  • البساطة: كان الوقت في أنظمة Unix المبكرة يُخزن كعدد صحيح 32 بت بإشارة يحسب الثواني. استخدام تاريخ حديث زاد من النطاق القابل للتمثيل في المستقبل.
  • السابقة: تمت صياغة العصر في أول معيار POSIX، مما جعله المرجع العالمي للأنظمة المشتقة من Unix.

استخدمت أنظمة سابقة شبيهة بـ Unix تواريخ عصر مختلفة، لكن عصر 1970 انتصر وكان المعيار لجميع الأنظمة المتوافقة مع POSIX منذ ذلك الحين.

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

الفكرة الأساسية مباشرة:

  • الطابع الزمني 0 يعني بالضبط 1 يناير 1970، 00:00:00 UTC
  • الطابع الزمني 86400 (60 × 60 × 24) يعني 2 يناير 1970، 00:00:00 UTC
  • الطابع الزمني 3600- يعني 31 ديسمبر 1969، 23:00:00 UTC (الطوابع الزمنية السالبة تمثل التواريخ قبل العصر)

المعادلة بسيطة:

الطابع الزمني = الثواني منذ 1970-01-01 00:00:00 UTC

الطوابع الزمنية بالميلي ثانية

تستخدم العديد من الأنظمة الحديثة، خاصة JavaScript وواجهات API للويب، الميلي ثانية بدلاً من الثواني. الطابع الزمني بالميلي ثانية هو ببساطة القيمة المعتمدة على الثواني مضروبة في 1000:

  • ترجع Date.now() في JavaScript الميلي ثانية
  • ترجع time.time() في Python الثواني كعدد عشري مع ميلي ثانية كسرية

تحقق دائمًا من الدقة التي يستخدمها النظام قبل التحويل، لأن الخلط بينها يمكن أن ينتج تواريخ خاطئة بعقود.

مشكلة عام 2038

مشكلة عام 2038 (المعروفة أيضًا باسم "خطأ الألفية لنظام Unix" أو "Y2K38") هي مشكلة تمثيل الوقت التي ستؤثر على الأنظمة التي تخزن الطوابع الزمنية كـ أعداد صحيحة 32 بت بإشارة.

يمكن للعدد الصحيح 32 بت بإشارة أن يحمل قيمًا من حوالي -2.1 مليار إلى +2.1 مليار. الحد الأقصى للطابع الزمني لنظام Unix القابل للتمثيل هو 2147483647، والذي يقابل:

  • 19 يناير 2038، 03:14:07 UTC

بعد ثانية واحدة، ستتجاوز القيمة إلى 2147483648-، والتي تمثل 13 ديسمبر 1901 — مما يتسبب في تفسير الأنظمة للوقت الحالي كتاريخ من أوائل القرن العشرين.

ما هي الأنظمة المتأثرة؟

  • الأجهزة المضمنة وأجهزة IoT بمعالجات 32 بت
  • أنوية Linux المضمنة القديمة
  • قواعد البيانات القديمة التي تستخدم أعمدة وقت 32 بت
  • أنظمة الملفات والتنسيقات الثنائية التي تخزن الوقت كأعداد صحيحة 32 بت

الحل

انتقلت الأنظمة الحديثة في الغالب إلى أعداد صحيحة 64 بت لتخزين الوقت. يمكن للعدد الصحيح 64 بت بإشارة تمثيل أوقات تصل إلى حوالي 292 مليار عام في المستقبل — غير محدودة فعليًا لأي غرض عملي.

  • معظم توزيعات Linux الحديثة على أجهزة 64 بت آمنة بالفعل
  • استخدمت نواة Linux time_t 64 بت على أنظمة 64 بت لسنوات
  • قدمت النواة 5.6+ دعم time_t 64 بت لمعماريات 32 بت
  • لغات البرمجة مثل Python و Go و Java تستخدم أعدادًا صحيحة 64 بت داخليًا

إذا كنت تدير أنظمة مضمنة أو برامج قديمة، فإن التحقق من حجم time_t هو تمرين جدير بالاهتمام اليوم.

UTC والعلاقة مع الطوابع الزمنية لنظام Unix

الطوابع الزمنية لنظام Unix هي بطبيعتها مستقلة عن المنطقة الزمنية — إنها تشير دائمًا إلى UTC.

ما هو UTC؟

التوقيت العالمي المنسق (UTC) هو معيار الوقت الأساسي الذي تنظم به الساعات والتوقيت عالميًا. حل محل توقيت غرينتش (GMT) كمعيار دولي ويتم صيانته بواسطة الساعات الذرية.

لماذا UTC مهم للطوابع الزمنية لنظام Unix

  • الطوابع الزمنية لنظام Unix معرفة بـ UTC، لذا يمثل الطابع الزمني نفس اللحظة عالميًا
  • تحويل الطابع الزمني لنظام Unix إلى التوقيت المحلي هو مجرد مسألة طبقة عرض
  • لا يتم تخزين معلومات المنطقة الزمنية في الطابع الزمني نفسه، مما يحافظ على بساطة النظام وقابليته للنقل

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

الثواني الكبيسة: الاستثناء النادر

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

هذا التبسيط يحافظ على النظام عمليًا لكنه يعني أن الطوابع الزمنية لنظام Unix تتباعد قليلاً عن الوقت الذري. الفرق صغير بما يكفي لدرجة أنه نادرًا ما يهم للتطبيقات اليومية.

نطاقات الطوابع الزمنية الشائعة

| الطابع الزمني | التاريخ القابل للقراءة البشرية | الأهمية | |-----------|---------------------|--------------| | 0 | 1970-01-01 00:00:00 UTC | عصر Unix | | 86400 | 1970-01-02 00:00:00 UTC | يوم واحد بعد العصر | | 946684800 | 2000-01-01 00:00:00 UTC | عام 2000 | | 1234567890 | 2009-02-13 23:31:30 UTC | نمط لا يُنسى | | 1785292800 | 2026-07-19 00:00:00 UTC | عصر اليوم | | 2147483647 | 2038-01-19 03:14:07 UTC | الحد الأقصى 32 بت |

ملخص

الطابع الزمني لنظام Unix هو طريقة أنيقة ومحمولة لتمثيل الوقت كعدد صحيح واحد. تصميمه — عد الثواني من 1 يناير 1970 UTC — يجعله معيار الوقت العالمي عبر أنظمة التشغيل وقواعد البيانات ولغات البرمجة. بينما تلوح مشكلة 2038 للأنظمة القديمة، فإن الانتقال المستمر إلى وقت 64 بت يضمن أن الطابع الزمني لنظام Unix سيبقى حجر الأساس لضبط الوقت في الحوسبة للأجيال القادمة.

هل أنت مستعد للعمل مع الطوابع الزمنية لنظام Unix؟ استخدم محول الطابع الزمني لنظام Unix للتحويل الفوري بين الطوابع الزمنية والتواريخ القابلة للقراءة البشرية.