توقيت يونكس

وقت يونكس  هو تمثيل التاريخ والوقت المستخدم على نطاق واسع في الحوسبة. يقيس الوقت بعدد الثواني غير الكبيسة التي انقضت منذ الساعة 00:00:00 بالتوقيت العالمي المنسق في يوم 1 يناير 1970، عصر يونكس. على سبيل المثال، في منتصف ليل يوم 1 يناير 2010، كان وقت يونكس هو 1262304000.

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

 التعريف 
يتم تعريف وقت يونكس حاليًا على أنه عدد الثواني غير الكبيسة التي مرت منذ 00:00:00توقيت عالمي منسق يوم الخميس 1 يناير 1970، والذي يشار إليه باسم عصر يونكس. يتم عادةً ترميز وقت يونكس كعدد صحيح موقّع.

وقت يونكس  هو منتصف الليل بالضبط بتوقيت عالمي منسق في يوم 1 يناير 1970، مع زيادة وقت يونكس بمقدار 1 لكل ثانية غير كبيسة بعد ذلك. على سبيل المثال، 00:00:00توقيت عالمي منسق على 1 يمثل شهر يناير 1971 بتوقيت يونكس . تشير القيم السلبية، على الأنظمة التي تدعمها، إلى الأوقات التي سبقت عصر يونكس، مع انخفاض القيمة بمقدار 1 لكل ثانية غير كبيسة قبل العصر. على سبيل المثال، 00:00:00توقيت عالمي منسق على 1 يتم تمثيل شهر يناير 1969 بتوقيت يونكس على أنه . يتكون كل يوم في وقت يونكس من  ثانية بالضبط.

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

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

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

+ وقت يونكس عبر منتصف الليل حتى 17 سبتمبر 2004 (بدون ثوانٍ كبيسة) تاي (17 سبتمبر 2004) توقيت عالمي منسق (16 إلى 17 سبتمبر 2004) وقت يونكس 2004-09-17T00:00:30.75 2004-09-16T23:59:58.75  2004-09-17T00:00:31.00 2004-09-16T23:59:59.00  2004-09-17T00:00:31.25 2004-09-16T23:59:59.25  2004-09-17T00:00:31.50 2004-09-16T23:59:59.50  2004-09-17T00:00:31.75 2004-09-16T23:59:59.75  2004-09-17T00:00:32.00 2004-09-17T00:00:00.00  2004-09-17T00:00:32.25 2004-09-17T00:00:00.25  2004-09-17T00:00:32.50 2004-09-17T00:00:00.50  2004-09-17T00:00:32.75 2004-09-17T00:00:00.75  2004-09-17T00:00:33.00 2004-09-17T00:00:01.00  2004-09-17T00:00:33.25 2004-09-17T00:00:01.25 

عندما تحدث ثانية كبيسة، فإن يوم توقيت عالمي منسق ليس بالضبط  ثانية، ويواجه رقم وقت يونكس (الذي يزداد دائمًا بمقدار  بالضبط كل يوم) انقطاعًا. قد تكون الثواني الكبيسة موجبة أو سالبة. لم يتم الإعلان عن ثانية كبيسة سلبية على الإطلاق، ولكن إذا تم الإعلان عن واحدة، ففي نهاية اليوم الذي يحتوي على ثانية كبيسة سلبية، فإن رقم وقت يونكس سيقفز بمقدار 1 إلى بداية اليوم التالي. أثناء الثانية الكبيسة الموجبة في نهاية اليوم، وهو ما يحدث كل عام ونصف تقريبًا في المتوسط، يزداد روقت يونكسقم وقت يونكس بشكل مستمر في اليوم التالي أثناء الثانية الكبيسة ثم في نهاية الثانية الكبيسة يقفز للخلف بمقدار 1 (يعود إلى بداية اليوم التالي). على سبيل المثال، هذا ما حدث في أنظمة واجهة أنظمة التشغيل المحمولة المطابقة تمامًا في نهاية عام 1998:

+ وقت يونكس عبر منتصف الليل حتى الأول من يناير 1999 (ثانية كبيسة موجبة) تاي (1 يناير 1999) توقيت عالمي منسق (31 ديسمبر 1998 إلى 1 يناير 1999) وقت يونكس 1999-01-01T00:00:29.75 1998-12-31T23:59:58.75  1999-01-01T00:00:30.00 1998-12-31T23:59:59.00  1999-01-01T00:00:30.25 1998-12-31T23:59:59.25  1999-01-01T00:00:30.50 1998-12-31T23:59:59.50  1999-01-01T00:00:30.75 1998-12-31T23:59:59.75  1999-01-01T00:00:31.00 1998-12-31T23:59:60.00  1999-01-01T00:00:31.25 1998-12-31T23:59:60.25  1999-01-01T00:00:31.50 1998-12-31T23:59:60.50  1999-01-01T00:00:31.75 1998-12-31T23:59:60.75  1999-01-01T00:00:32.00 1999-01-01T00:00:00.00  1999-01-01T00:00:32.25 1999-01-01T00:00:00.25  1999-01-01T00:00:32.50 1999-01-01T00:00:00.50  1999-01-01T00:00:32.75 1999-01-01T00:00:00.75  1999-01-01T00:00:33.00 1999-01-01T00:00:01.00  1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 

تتكرر أرقام وقت يونكس في الثانية التي تلي الثانية الكبيسة الموجبة مباشرة. وبالتالي فإن رقم وقت يونكس  غامض: يمكن أن يشير إما إلى بداية الثانية الكبيسة (2016-12-31 23:59:60) أو نهايتها، بعد ثانية واحدة (2017-01-01 00:00:00). في الحالة النظرية عندما تحدث ثانية كبيسة سلبية، لا يحدث أي غموض، ولكن بدلاً من ذلك يوجد نطاق من أرقام وقت يونكس التي لا تشير إلى أي نقطة في توقيت عالمي منسق على الإطلاق.

غالبًا ما يتم تنفيذ ساعة يونكس باستخدام نوع مختلف من التعامل مع الثواني الكبيسة الإيجابية المرتبطة ببروتوكول وقت الشبكة (NTP). ويؤدي هذا إلى إنشاء نظام لا يتوافق مع معيار واجهة أنظمة التشغيل المحمولة. راجع القسم أدناه فيما يتعلق بـ NTP للحصول على التفاصيل.

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

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

 متغير قائم على بروتوكول وقت الشبكة غير المتزامن 
بشكل عام، يتم تنفيذ ساعة يونكس على غرار ميلز مع التعامل مع الثواني الكبيسة غير المتزامنة مع تغيير رقم وقت يونكس. يبدأ رقم الوقت في البداية بالتناقص في المكان الذي كان من المفترض أن تحدث فيه القفزة، ثم يقفز إلى الوقت الصحيح بعد ثانية واحدة من القفزة. وهذا يجعل التنفيذ أسهل، وهو ما وصفه بحث ميلز. وهذا ما يحدث عبر ثانية كبيسة موجبة:
+ ساعة يونكس غير متزامنة على طراز ميلز
حتى منتصف الليل حتى الأول من يناير/كانون الثاني 1999 (ثانية كبيسة موجبة) تاي (1 يناير 1999) التوقيت العالمي المنسق (31 ديسمبر 1998 إلى 1 يناير 1999) الحالة ساعة يونكس 1999-01-01T00:00:29.75 1998-12-31T23:59:58.75 TIME_INS  1999-01-01T00:00:30.00 1998-12-31T23:59:59.00 TIME_INS  1999-01-01T00:00:30.25 1998-12-31T23:59:59.25 TIME_INS  1999-01-01T00:00:30.50 1998-12-31T23:59:59.50 TIME_INS  1999-01-01T00:00:30.75 1998-12-31T23:59:59.75 TIME_INS  1999-01-01T00:00:31.00 1998-12-31T23:59:60.00 TIME_INS  1999-01-01T00:00:31.25 1998-12-31T23:59:60.25 TIME_OOP  1999-01-01T00:00:31.50 1998-12-31T23:59:60.50 TIME_OOP  1999-01-01T00:00:31.75 1998-12-31T23:59:60.75 TIME_OOP  1999-01-01T00:00:32.00 1999-01-01T00:00:00.00 TIME_OOP  1999-01-01T00:00:32.25 1999-01-01T00:00:00.25 TIME_WAIT  1999-01-01T00:00:32.50 1999-01-01T00:00:00.50 TIME_WAIT  1999-01-01T00:00:32.75 1999-01-01T00:00:00.75 TIME_WAIT  1999-01-01T00:00:33.00 1999-01-01T00:00:01.00 TIME_WAIT  1999-01-01T00:00:33.25 1999-01-01T00:00:01.25 TIME_WAIT 

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

يحدث موقف مشابه مع ثانية كبيسة سالبة، حيث تكون الثانية المُتخطاة متأخرة قليلاً. يُظهر النظام، باختصار شديد، رقمًا زمنيًا مستحيلًا ظاهريًا، ولكن يُمكن اكتشافه من خلال حالة حذف الوقت (TIME_DEL) وتصحيحه.

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

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

 متغير يحسب الثواني الكبيسة 
تتضمن متغيرات أخرى غير متوافقة وأكثر ندرة في نظام يونكس لقياس الوقت زيادة القيمة لجميع الثواني، بما في ذلك الثواني الكبيسة؛ يتم تكوين بعض أنظمة لينكس بهذه الطريقة. يُشار أحيانًا إلى الوقت المحفوظ بهذه الطريقة باسم «التوقيت الذري العالمي» (على الرغم من أنه يمكن تحويل الطوابع الزمنية إلى توقيت عالمي منسق إذا كانت القيمة تتوافق مع وقت يكون فيه الفرق بين TAI وتوقيت عالمي منسق معروفًا)، على عكس «التوقيت العالمي المنسق» (على الرغم من أن ليس كل قيم توقيت عالمي منسق لها مرجع فريد في الأنظمة التي لا تحسب الثواني الكبيسة).

لأن TAI لا يحتوي على ثوانٍ كبيسة، وطول كل يوم في TAI هو 86400 ثانية بالضبط، فإن هذا الترميز هو في الواقع عدّ خطي للثواني المنقضية منذ 1970-01-01T00:00:10 TAI. هذا يُسهّل حساب الفواصل الزمنية بشكل كبير. قيم الوقت من هذه الأنظمة لا تعاني من الغموض الذي تعاني منه أنظمة واجهة أنظمة التشغيل المحمولة المتوافقة تمامًا أو الأنظمة التي تعمل بنظام NTP.

في هذه الأنظمة، من الضروري استشارة جدول الثواني الكبيسة للتحويل بشكل صحيح بين توقيت عالمي منسق وتمثيل وقت يونكس الزائف. يشبه هذا الطريقة التي يجب بها استشارة جداول المنطقة الزمنية للتحويل من وإلى  ؛ تتضمن قاعدة بيانات المنطقة الزمنية IANA معلومات الثانية الكبيسة، ويستخدم كود العينة المتاح من نفس المصدر هذه المعلومات للتحويل بين الطوابع الزمنية المستندة إلى TAI والوقت المحلي. ويواجه التحويل أيضًا مشاكل تعريفية قبل بدء العمل بالشكل الحالي للتوقيت العالمي المنسق في عام 1972 (انظر قسم أساس التوقيت العالمي المنسق أدناه).

هذا النظام، على الرغم من تشابهه الظاهري، ليس زمن يونكس. يقوم بترميز الأوقات بقيم تختلف بعدة ثوانٍ عن قيم وقت واجهة أنظمة التشغيل المحمولة. نسخة من هذا النظام، حيث كان العصر 1970-01-01T00:00:00TAI بدلاً من 1970-01-01T00:00:10تم اقتراح تضمين TAI في  الخاص بإيزو سي، ولكن تم قبول جزء توقيت عالمي منسق فقط في عام 2011. ومع ذلك، توجد  في سي++20.

 تمثيل الرقم 
يمكن تمثيل رقم يونكس الزمني بأي شكل قادر على تمثيل الأرقام. في بعض التطبيقات، يُمثَّل الرقم نصيًا كسلسلة من الأرقام العشرية، مما يُثير مشاكل إضافية بسيطة. مع ذلك، تُعد بعض التمثيلات الثنائية لأرقام يونكس زمنية ذات أهمية خاصة.

نوع بيانات يونكس time_t الذي يمثل نقطة في الوقت هو، على العديد من المنصات، عدد صحيح موقّع، تقليديًا يتكون من 32بتات (ولكن انظر أدناه)، تقوم بتشفير رقم وقت يونكس بشكل مباشر كما هو موضح في القسم السابق. تغطي القيمة الموقعة المكونة من 32 بت ما يقرب من 68 عامًا قبل وبعد عصر 1970-01-01. الحد الأدنى للتاريخ القابل للتمثيل هو الجمعة 1901-12-13، والحد الأقصى للتاريخ القابل للتمثيل هو الثلاثاء 2038-01-19. بعد ثانية واحدة من 2038-01-19T03:14:07Z سوف يفيض هذا التمثيل في ما يعرف بمشكلة عام 2038.

يقوم المعرف الفريد العالمي 7 بتشفير الطابع الزمني لعصر يونكس (بالمللي ثانية) في حقل غير موقّع مكون من 48 بت. هذا التمثيل صالح حتى عام 10889 م.

في بعض أنظمة التشغيل الأحدث، تم توسيع time_t إلى 64 بت. يؤدي هذا إلى توسيع الأوقات القابلة للتمثيل إلى حوالي  في كلا الاتجاهين، وهو ما يزيد عن عشرين ضعف عمر الكون الحالي.

كان هناك في الأصل بعض الجدل حول ما إذا كان يجب توقيع يونكس time_t أم لا. إذا لم يتم توقيعه، فسيتم مضاعفة نطاقه في المستقبل، مما يؤدي إلى تأجيل تجاوز 32 بت (بمقدار 68 عامًا). ومع ذلك، فإنه لن يكون قادرا على تمثيل الأوقات السابقة لهذا العصر. الإجماع هو أن يتم توقيع time_t، وهذه هي الممارسة المعتادة. تحتوي منصة تطوير البرامج لإصدار 6 من نظام التشغيل كيو إن إكس على time_t غير موقّع 32 بت، على الرغم من أن الإصدارات الأقدم استخدمت نوعًا موقّعًا.

تتضمن مواصفات واجهة أنظمة التشغيل المحمولة والمجموعة المفتوحة يونكس مكتبة سي القياسية، والتي تتضمن أنواع الوقت والوظائف المحددة في ملف الرأس < time.h >. تنص معايير إيزو سي على أن time_t يجب أن يكون نوعًا حسابيًا، لكنها لا تفرض أي نوع أو ترميز محدد له. يتطلب نظام واجهة أنظمة التشغيل المحمولة أن يكون time_t نوع عدد صحيح، لكنه لا يفرض أن يكون موقّعًا أو غير موقّع.

لا يوجد لدى يونكس تقليد لتمثيل أرقام وقت يونكس غير الصحيحة بشكل مباشر على شكل كسور ثنائية. بدلاً من ذلك، يتم تمثيل الأوقات ذات الدقة الفرعية من الثانية باستخدام  التي تتكون من عددين صحيحين، الأول هو time_t (الجزء المتكامل من وقت يونكس)، والثاني هو الجزء الكسري من رقم الوقت بالمليون (في struct timeval) أو المليارات (في struct timespec). توفر هذه الهياكل تنسيق بيانات  العشري، وهو مفيد لبعض التطبيقات، وسهل التحويل لتطبيقات أخرى.

 قاعدة التوقيت العالمي المنسق 
الشكل الحالي للتوقيت العالمي المنسق، مع الثواني الكبيسة، يتم تعريفه فقط بدءًا من 1 يناير 1972. قبل ذلك، منذ عام 1 في يناير 1961 كان هناك شكل أقدم من التوقيت العالمي المنسق، والذي لم يتضمن فقط خطوات زمنية عرضية، والتي كانت بأعداد غير صحيحة من الثواني، ولكن أيضًا كانت ثانية التوقيت العالمي المنسق أطول قليلاً من ثانية النظام الدولي للوحدات، وكانت تتغير بشكل دوري لتقريب دوران الأرض باستمرار. قبل عام 1961 لم يكن هناك توقيت عالمي منسق، وقبل عام 1958 لم يكن هناك قياس واسع النطاق للوقت الذري ؛ في هذه العصور، تم استخدام تقريبات توقيت جرينتش (بناءً على دوران الأرض مباشرة) بدلاً من مقياس الوقت الذري.

إن التعريف الدقيق لتوقيت يونكس كترميز للتوقيت العالمي المنسق لا يثير الجدل إلا عند تطبيقه على الشكل الحالي منه. ولا يؤثر تاريخ يونكس السابق لبداية هذا الشكل من التوقيت العالمي المنسق على استخدامه في هذا العصر: فعدد الأيام من 1 يناير 1970 (عصر يونكس) إلى 1 يناير 1972 (بداية التوقيت العالمي المنسق) ليس محل شك، وعدد الأيام هو كل ما يهم في توقيت يونكس.

إن معنى قيم وقت يونكس التي تقل عن +63 072 000 (أي قبل 1 يناير 1972) غير محدد بدقة. ويُفهم أن أساس أوقات يونكس هذه هو تقريب غير محدد للتوقيت العالمي المنسق. نادرًا ما كانت أجهزة الكمبيوتر في تلك الحقبة مزودة بساعات دقيقة بما يكفي لتوفير طوابع زمنية دقيقة بأجزاء من الثانية. لا يُعد وقت يونكس طريقة مناسبة لتمثيل الأوقات قبل عام 1972 في التطبيقات التي تتطلب دقة بأجزاء من الثانية؛ ويجب على هذه التطبيقات، على الأقل، تحديد شكل التوقيت العالمي المنسق أو توقيت غرينتش الذي تستخدمه.

اعتبارًا من عام 2009، يتم النظر في إمكانية إنهاء استخدام الثواني الكبيسة في التوقيت المدني. إحدى الوسائل المحتملة لتنفيذ هذا التغيير هي تحديد مقياس زمني جديد، يسمى التوقيت الدولي، والذي يتطابق في البداية مع التوقيت العالمي المنسق ولكن بعد ذلك لا يحتوي على ثوانٍ كبيسة، وبالتالي يبقى عند إزاحة ثابتة عن التوقيت الدولي القياسي. إذا حدث هذا، فمن المحتمل أن يتم تعريف وقت يونكس مستقبليًا من حيث هذا المقياس الزمني الجديد، بدلاً من التوقيت العالمي المنسق. إن عدم اليقين بشأن ما إذا كان هذا سيحدث يجعل وقت يونكس المستقبلي لا يقل قابلية للتنبؤ عما هو عليه بالفعل: إذا لم يكن للتوقيت العالمي المنسق أي ثوانٍ كبيسة أخرى، فستكون النتيجة هي نفسها.

 التاريخ 
كانت الإصدارات الأولى من نظام يونكس تحتوي على عدد صحيح مكون من 32 بت يتزايد بمعدل 60 هرتز، وهو معدل ساعة النظام على الأجهزة في أنظمة يونكس المبكرة. لا يمكن للطوابع الزمنية المخزنة بهذه الطريقة أن تمثل سوى نطاق يزيد قليلاً عن عامين وربع العام. تم تغيير العصر الذي يتم العد منه مع إصدارات يونكس لمنع التدفق الزائد، مع منتصف الليل في 1 يناير 1971 و 1 يناير 1972 تم استخدامهما كعصرين خلال التطوير المبكر لنظام يونكس. كانت التعريفات المبكرة لوقت يونكس تفتقر أيضًا إلى المناطق الزمنية.

تم اختيار التاريخ الحالي، 1 يناير 1970، الساعة 00:00:00 بالتوقيت العالمي المنسق، بشكل تعسفي من قِبل مهندسي يونكس لأنه كان يُعتبر تاريخًا مناسبًا للعمل. تم تغيير الدقة إلى الثواني لتجنب تجاوز الحد الأقصى للوقت.

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

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

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

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

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

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

لا يستخدم Windows وقت يونكس لتخزين الوقت داخليًا ولكنه يستخدمه في واجهات برمجة التطبيقات للنظام، والتي يتم توفيرها في سي++ وتنفذ مواصفات مكتبة سي القياسية. يتم استخدام وقت يونكس في تنسيق بي إس للملفات القابلة للتنفيذ في نظام التشغيل Windows.

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

ينفذ فري باسكال وقت يونكس باستخدام الوظيفتين  (32 بت غير موقعة) و (64 بت غير موقعة) بدقة 1 مللي ثانية على منصات شبيهة بيونكس.

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

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

 مجموعة من الأوقات القابلة للتمثيل 

تصغير|upright=1.8|رسوم متحركة توضيحية لتجاوز وقت يونكس 32 بت الذي سيحدث في عام 2038

لا يتطلب وقت يونكس حسب التصميم حجمًا محددًا للتخزين، ولكن معظم التنفيذات الشائعة لوقت يونكس تستخدم عددًا صحيحًا موقّعًا بنفس حجم حجم كلمة الأجهزة الأساسية. نظرًا لأن غالبية أجهزة الكمبيوتر الحديثة هي 32 بت أو 64 بت، ولا يزال عدد كبير من البرامج مكتوبًا في وضع التوافق 32 بت، فهذا يعني أن العديد من البرامج التي تستخدم وقت يونكس تستخدم حقول عدد صحيح موقعة 32 بت. القيمة القصوى لعدد صحيح مكون من 32 بت هي ، والقيمة الدنيا هي ، مما يجعل من المستحيل تمثيل التواريخ قبل 13 ديسمبر 1901 (في الساعة 20:45:52 بالتوقيت العالمي المنسق) أو بعد 19 يناير 2038 (في الساعة 03:14:07 بالتوقيت العالمي المنسق). يمكن أن يكون للقطع المبكر تأثير على قواعد البيانات التي تخزن المعلومات التاريخية؛ في بعض قواعد البيانات حيث يتم استخدام وقت يونكس 32 بت للطوابع الزمنية، قد يكون من الضروري تخزين الوقت في شكل مختلف من الحقول، مثل سلسلة، لتمثيل التواريخ قبل عام 1901. تُعرف عملية القطع المتأخرة باسم مشكلة عام 2038 ولديها القدرة على التسبب في مشكلات مع اقتراب التاريخ، حيث ستعود التواريخ التي تقع بعد عملية القطع لعام 2038 إلى بداية النطاق القابل للتمثيل في عام 1901.

لا تشكل حدود نطاق التاريخ مشكلة مع التمثيلات المكونة من 64 بت لوقت يونكس، حيث أن النطاق الفعال للتواريخ التي يمكن تمثيلها باستخدام وقت يونكس المخزن في عدد صحيح مكون من 64 بت يزيد عن 584 مليار سنة، أو 292 مليار سنة في أي اتجاه من عصر 1970.

 البدائل 
وقت يونكس ليس هو المعيار الوحيد للوقت الذي يتم احتسابه بعيدًا عن العصر. في نظام التشغيل Windows، يخزن نوع FILETIME الوقت كعدد من الفواصل الزمنية التي تبلغ 100 نانوثانية والتي انقضت منذ الساعة 0:00 بتوقيت جرينتش في يوم 1 يناير 1601. يتم استخدام وقت عصر Windows لتخزين الطوابع الزمنية للملفات وفي البروتوكولات مثل خدمة وقت أكتيف ديريكتوري و.

يستخدم بروتوكول وقت الشبكة المستخدم لتنسيق الوقت بين أجهزة الكمبيوتر حقبة زمنية قدرها 1 يناير 1900، تم حسابه في عدد صحيح غير موقّع مكون من 32 بت للثواني وعدد صحيح غير موقّع آخر مكون من 32 بت للثواني الكسرية، والذي يتكرر كل 2  ثانية (مرة واحدة كل 136 عامًا تقريبًا).

توفر العديد من التطبيقات ولغات البرمجة طرقًا لتخزين الوقت باستخدام منطقة زمنية محددة. هناك أيضًا عدد من معايير تنسيق الوقت التي تم إنشاؤها لتكون قابلة للقراءة من قبل البشر وأجهزة الكمبيوتر، مثل إيزو 8601.

 الأحداث البارزة في وقت يونكس 

لدى عشاق يونكس تاريخ في إقامة  (تُنطق «حفلات شاي الوقت») للاحتفال بالقيم المهمة لرقم وقت يونكس. وهذه تشبه بشكل مباشر احتفالات رأس السنة الجديدة التي تحدث عند تغيير العام في العديد من التقويمات. مع انتشار استخدام وقت يونكس، انتشرت أيضًا ممارسة الاحتفال بإنجازاته. عادةً ما يتم الاحتفال بقيم الوقت التي تكون عبارة عن أرقام تقريبية في النظام العشري، وفقًا لاتفاقية يونكس لعرض قيم time_t في النظام العشري. ومن بين بعض المجموعات يتم الاحتفال أيضًا بالأرقام الثنائية المستديرة، مثل +2 30، الذي حدث في الساعة 13:37:04 بالتوقيت العالمي المنسق يوم السبت، 10 يناير 2004.

يتم وصف الأحداث التي يحتفل بها هؤلاء عادةً بأنها «إن ثانية منذ عصر يونكس»، ولكن هذا غير دقيق؛ كما تمت مناقشته أعلاه، بسبب التعامل مع الثواني الكبيسة في وقت يونكس فإن عدد الثواني المنقضية منذ عصر يونكس أكبر قليلاً من رقم وقت يونكس للأوقات اللاحقة للعصر.

 في الساعة 18:36:57 بتوقيت عالمي منسق يوم الأربعاء 17 في أكتوبر 1973، حدث أول ظهور للتاريخ بتنسيق أيزو 8601 ضمن أرقام وقت يونكس (119731017).
 في الساعة 01:46:40 بالتوقيت العالمي المنسق يوم الأحد 9 في سبتمبر 2001، تم الاحتفال بمليارية يونكس (رقم وقت يونكس ). اسم المليار هو عبارة عن كلمة مليار وألفية. واجهت بعض البرامج التي تخزن الطوابع الزمنية باستخدام تمثيل نصي أخطاء في الفرز، كما هو الحال في فرز النص، حيث تم فرز الأوقات بعد الدورة التي تبدأ برقم واحد بشكل خاطئ قبل الأوقات السابقة التي تبدأ برقم 9. وشملت البرامج المتأثرة قارئ يوزنت الشهير متراسلك وعميل البريد الإلكتروني متراسلك، وهو جزء من بيئة سطح مكتب كيدي. كانت مثل هذه الأخطاء تجميلية في طبيعتها بشكل عام، وتم إصلاحها بسرعة بمجرد ظهور المشاكل. أثرت المشكلة أيضًا على العديد من مرشحات تنسيق المستندات فيلتركس المتوفرة مع إصدارات لينكس من ووردبيرفكت ؛ وقد تم إنشاء تصحيح بواسطة مجتمع المستخدمين لحل هذه المشكلة، حيث لم تعد شركة كوريل تبيع أو تدعم هذا الإصدار من البرنامج.
 في الساعة 23:31:30 بالتوقيت العالمي المنسق يوم الجمعة 13 في فبراير 2009، وصل التمثيل العشري لوقت يونكس . احتفلت جوجل بهذا من خلال رسم جوجل دودل. أقيمت الحفلات والاحتفالات الأخرى في جميع أنحاء العالم، بين مختلف الثقافات الفرعية التقنية، للاحتفال بالثانية 

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

 الملاحظات 

 المراجع 

 وصلات خارجية 
 دليل مبرمج يونكس، الطبعة الأولى
 الحساب الشخصي لقرارات واجهة أنظمة التشغيل المحمولة بقلم 

 خوارزميات التاريخ منخفضة المستوى المتوافقة مع الكرونو – خوارزميات لتحويل التاريخ بين الميلادي واليولياني وعدد الأيام منذ بداية وقت يونكس

تصنيف:1970
تصنيف:أنظمة قياس الوقت
تصنيف:مقاييس زمنية
تصنيف:يونكس
تصنيف:علم الحاسوب في 1970