محول الطابع الزمني يونكس
التاريخ والوقت المحول
محول الطوابع الزمنية لنظام يونكس
المقدمة
تُعتبر الطوابع الزمنية لنظام يونكس (المعروفة أيضًا باسم وقت POSIX أو وقت Epoch) نظامًا لوصف نقطة زمنية. إنها عدد الثواني التي مرت منذ 1 يناير 1970 (منتصف الليل بتوقيت UTC/GMT)، دون احتساب الثواني الكبيسة. تُستخدم الطوابع الزمنية لنظام يونكس على نطاق واسع في أنظمة الكمبيوتر ولغات البرمجة لأنها توفر تمثيلًا مضغوطًا ومستقلًا عن اللغة للحظة معينة في الوقت.
يسمح لك هذا المحول بتحويل الطابع الزمني لنظام يونكس إلى تنسيق تاريخ ووقت سهل القراءة. يدعم كل من تنسيقات الوقت 12 ساعة (AM/PM) و24 ساعة لتلبية التفضيلات الإقليمية والشخصية المختلفة.
كيف تعمل الطوابع الزمنية لنظام يونكس
تُحسب الطوابع الزمنية لنظام يونكس كعدد الثواني منذ بداية نظام يونكس (1 يناير 1970، 00:00:00 بتوقيت UTC). وهذا يجعلها مفيدة بشكل خاص لحساب الفروق الزمنية ولتخزين التواريخ بتنسيق مضغوط.
تشمل عملية التحويل من الطابع الزمني لنظام يونكس إلى تاريخ تقويمي عدة خطوات:
- ابدأ مع بداية نظام يونكس (1 يناير 1970، 00:00:00 بتوقيت UTC)
- أضف عدد الثواني في الطابع الزمني
- احسب السنوات الكبيسة، وأطوال الأشهر المتغيرة، وغيرها من التعقيدات التقويمية
- طبق تعديلات المنطقة الزمنية إذا لزم الأمر
على سبيل المثال، يمثل الطابع الزمني لنظام يونكس 1609459200
يوم الجمعة، 1 يناير 2021، 00:00:00 بتوقيت UTC.
يمكن التعبير عن صيغة التحويل كالتالي:
تقدم معظم لغات البرمجة وأنظمة التشغيل وظائف مدمجة للتعامل مع هذا التحويل، مما يخفف من تعقيدات حسابات التقويم.
خيارات تنسيق الوقت
يقدم هذا المحول خيارين لتنسيق الوقت:
-
تنسيق 24 ساعة (المعروف أحيانًا باسم "الوقت العسكري"): تتراوح الساعات من 0 إلى 23، ولا يوجد تمييز AM/PM. على سبيل المثال، يتم تمثيل الساعة 3:00 مساءً كـ 15:00.
-
تنسيق 12 ساعة: تتراوح الساعات من 1 إلى 12، مع AM (قبل الظهر) للأوقات من منتصف الليل إلى الظهر، وPM (بعد الظهر) للأوقات من الظهر إلى منتصف الليل. على سبيل المثال، يتم تمثيل الساعة 15:00 في تنسيق 24 ساعة كـ 3:00 مساءً.
الاختيار بين هذه التنسيقات هو في الغالب مسألة تقليد إقليمي وتفضيل شخصي:
- يُستخدم تنسيق 24 ساعة بشكل شائع في معظم دول أوروبا وأمريكا اللاتينية وآسيا، بالإضافة إلى السياقات العلمية والعسكرية والطبية في جميع أنحاء العالم.
- يُستخدم تنسيق 12 ساعة بشكل شائع في الولايات المتحدة وكندا وأستراليا وبعض الدول الناطقة بالإنجليزية للاستخدام اليومي.
الحالات الحدية والقيود
عند العمل مع الطوابع الزمنية لنظام يونكس، من المهم أن تكون على دراية بعدة حالات حدية وقيود:
-
الطوابع الزمنية السلبية: تمثل هذه التواريخ قبل بداية نظام يونكس (1 يناير 1970). بينما هي صالحة رياضيًا، قد لا تتعامل بعض الأنظمة بشكل صحيح مع الطوابع الزمنية السلبية.
-
مشكلة عام 2038: غالبًا ما يتم تخزين الطوابع الزمنية لنظام يونكس كأعداد صحيحة موقعة 32 بت، والتي ستفيض في 19 يناير 2038. بعد هذه النقطة، لن تكون الأنظمة التي تستخدم 32 بت قادرة على تمثيل الأوقات بشكل صحيح ما لم يتم تعديلها لاستخدام نوع عدد صحيح أكبر.
-
الطوابع الزمنية الكبيرة جدًا: قد لا يمكن تمثيل التواريخ المستقبلية البعيدة في بعض الأنظمة، أو قد يتم التعامل معها بشكل غير متسق.
-
الثواني الكبيسة: لا يأخذ الوقت في نظام يونكس في الاعتبار الثواني الكبيسة، التي تُضاف أحيانًا إلى UTC لتعويض دوران الأرض غير المنتظم. وهذا يعني أن الوقت في نظام يونكس ليس متزامنًا بدقة مع الوقت الفلكي.
-
اعتبارات المنطقة الزمنية: تمثل الطوابع الزمنية لنظام يونكس لحظات بتوقيت UTC. يتطلب التحويل إلى الوقت المحلي معلومات إضافية عن المنطقة الزمنية.
-
توقيت الصيف: عند تحويل الطوابع الزمنية إلى الوقت المحلي، يجب أخذ تعقيدات انتقالات توقيت الصيف في الاعتبار.
حالات الاستخدام
تُستخدم الطوابع الزمنية لنظام يونكس في العديد من التطبيقات عبر الحوسبة وإدارة البيانات:
-
سجلات قواعد البيانات: تُستخدم الطوابع الزمنية عادةً لتسجيل متى تم إنشاء الإدخالات أو تعديلها.
-
تطوير الويب: غالبًا ما تستخدم رؤوس HTTP وملفات تعريف الارتباط وآليات التخزين المؤقت الطوابع الزمنية لنظام يونكس.
-
ملفات السجل: تسجل سجلات النظام عادةً الأحداث باستخدام الطوابع الزمنية لنظام يونكس لترتيبها زمنيًا بدقة.
-
أنظمة التحكم في الإصدارات: تستخدم Git وأنظمة التحكم في الإصدارات الأخرى الطوابع الزمنية لتسجيل متى تم إجراء الالتزامات.
-
استجابات واجهة برمجة التطبيقات: تتضمن العديد من واجهات برمجة التطبيقات على الويب الطوابع الزمنية في استجابتها للإشارة إلى متى تم إنشاء البيانات أو متى تم تعديل الموارد آخر مرة.
-
أنظمة الملفات: تُخزن أوقات إنشاء وتعديل الملفات غالبًا كطوابع زمنية لنظام يونكس.
-
إدارة الجلسات: تستخدم التطبيقات الويب الطوابع الزمنية لتحديد متى يجب أن تنتهي صلاحية جلسات المستخدم.
-
تحليل البيانات: توفر الطوابع الزمنية طريقة موحدة للعمل مع البيانات الزمنية في تطبيقات التحليل.
البدائل
بينما تُستخدم الطوابع الزمنية لنظام يونكس على نطاق واسع، هناك تنسيقات بديلة لتمثيل الوقت قد تكون أكثر ملاءمة في سياقات معينة:
-
ISO 8601: تنسيق سلسلة موحد (مثل "2021-01-01T00:00:00Z") يكون سهل القراءة مع الحفاظ على القابلية للفرز. يُفضل غالبًا لتبادل البيانات والتطبيقات الموجهة للمستخدم.
-
RFC 3339: ملف تعريف لـ ISO 8601 يُستخدم في بروتوكولات الإنترنت، مع متطلبات تنسيق أكثر صرامة.
-
التنسيقات سهلة القراءة: سلاسل التواريخ المحلية (مثل "1 يناير 2021") أكثر ملاءمة للتفاعل المباشر مع المستخدم ولكنها أقل ملاءمة للحسابات.
-
Microsoft FILETIME: قيمة 64 بت تمثل عدد الفواصل الزمنية التي تبلغ 100 نانوثانية منذ 1 يناير 1601، تُستخدم في أنظمة Windows.
-
رقم اليوم اليولياني: يُستخدم في علم الفلك وبعض التطبيقات العلمية، حيث يتم حساب الأيام منذ 1 يناير 4713 قبل الميلاد.
يعتمد اختيار تنسيق الوقت على عوامل مثل:
- الدقة المطلوبة
- احتياجات سهولة القراءة
- قيود التخزين
- التوافق مع الأنظمة الحالية
- نطاق التواريخ التي يجب تمثيلها
التاريخ
نشأت فكرة الوقت في نظام يونكس مع تطوير نظام التشغيل يونكس في مختبرات بيل في أواخر الستينيات وأوائل السبعينيات. كان القرار باستخدام 1 يناير 1970 كepoch أمرًا عشوائيًا بعض الشيء ولكنه عملي في ذلك الوقت - كان قريبًا بما يكفي لتقليل متطلبات التخزين لتواريخ الاهتمام ولكن بعيدًا بما يكفي في الماضي ليكون مفيدًا للبيانات التاريخية.
استخدمت التنفيذات الأصلية عددًا صحيحًا موقّعًا 32 بت لتخزين عدد الثواني، وهو ما كان كافيًا لعمر أنظمة يونكس المتوقع في ذلك الوقت. ومع ذلك، أدى هذا القرار إلى مشكلة عام 2038 (المعروفة أحيانًا باسم "Y2K38" أو "خطأ الألفية لنظام يونكس")، حيث لا يمكن للأعداد الصحيحة الموقعة 32 بت تمثيل التواريخ بعد 19 يناير 2038 (03:14:07 بتوقيت UTC).
مع ازدياد شعبية أنظمة يونكس وأنظمة التشغيل المشابهة، أصبحت الطوابع الزمنية لنظام يونكس معيارًا فعليًا لتمثيل الوقت في الحوسبة. تم اعتمادها من قبل العديد من لغات البرمجة وقواعد البيانات والتطبيقات، مما جعلها تمتد بعيدًا عن بيئة يونكس الأصلية.
تستخدم الأنظمة الحديثة بشكل متزايد أعدادًا صحيحة 64 بت للطوابع الزمنية، مما يوسع النطاق القابل للتمثيل إلى حوالي 292 مليار سنة في كلا الاتجاهين من epoch، مما يحل فعليًا مشكلة عام 2038. ومع ذلك، قد تظل الأنظمة والتطبيقات القديمة معرضة للخطر.
لقد ضمنت بساطة وفائدة الطابع الزمني لنظام يونكس استمراره في الصدارة على الرغم من تطوير تنسيقات تمثيل الوقت الأكثر تطورًا. لا يزال مفهومًا أساسيًا في الحوسبة، ويشكل أساسًا للعديد من بنيتنا التحتية الرقمية.
أمثلة على التعليمات البرمجية
إليك أمثلة على كيفية تحويل الطوابع الزمنية لنظام يونكس إلى تواريخ سهلة القراءة في لغات البرمجة المختلفة:
// تحويل الطابع الزمني في JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
// إنشاء كائن Date جديد (تستخدم JavaScript المللي ثانية)
const date = new Date(timestamp * 1000);
// خيارات التنسيق
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
// تحويل إلى سلسلة باستخدام تنسيق locale
return date.toLocaleString(undefined, options);
}
// مثال على الاستخدام
const timestamp = 1609459200; // 1 يناير 2021 00:00:00 بتوقيت UTC
console.log(convertUnixTimestamp(timestamp, false)); // تنسيق 24 ساعة
console.log(convertUnixTimestamp(timestamp, true)); // تنسيق 12 ساعة
معالجة الحالات الحدية
عند العمل مع الطوابع الزمنية لنظام يونكس، من المهم معالجة الحالات الحدية بشكل صحيح. إليك أمثلة على معالجة بعض الحالات الحدية الشائعة:
// معالجة الحالات الحدية في JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
// التحقق مما إذا كان الطابع الزمني صالحًا
if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
return "طابع زمني غير صالح";
}
// التحقق من الطوابع الزمنية السلبية (التواريخ قبل 1970)
if (timestamp < 0) {
// قد لا تتعامل بعض المتصفحات مع الطوابع الزمنية السلبية بشكل صحيح
// استخدم نهجًا أكثر قوة للتواريخ قبل 1970
const date = new Date(timestamp * 1000);
if (isNaN(date.getTime())) {
return "تاريخ غير صالح (قبل 1970)";
}
}
// التحقق من مشكلة Y2K38 (بالنسبة للأنظمة 32 بت)
const maxInt32 = 2147483647; // القيمة القصوى للعدد الصحيح الموقّع 32 بت
if (timestamp > maxInt32) {
// اعتبر استخدام BigInt للطوابع الزمنية الكبيرة جدًا في JavaScript الحديثة
console.warn("يتجاوز الطابع الزمني حد العدد الصحيح 32 بت (مشكلة Y2K38)");
}
// تابع مع التحويل العادي
try {
const date = new Date(timestamp * 1000);
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
return date.toLocaleString(undefined, options);
} catch (error) {
return "خطأ في تحويل الطابع الزمني: " + error.message;
}
}
المراجع
-
"وقت يونكس." ويكيبيديا، مؤسسة ويكيميديا، https://en.wikipedia.org/wiki/Unix_time
-
"مشكلة عام 2038." ويكيبيديا، مؤسسة ويكيميديا، https://en.wikipedia.org/wiki/Year_2038_problem
-
أولسون، آرثر ديفيد. "تعقيدات الوقت التقويمي." مجموعة Open، https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." ويكيبيديا، مؤسسة ويكيميديا، https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: التاريخ والوقت على الإنترنت: الطوابع الزمنية." مجموعة هندسة الإنترنت (IETF)، https://tools.ietf.org/html/rfc3339
-
كيرنيغان، بريان و.، ودينيس م. ريتشي. "لغة البرمجة C." برنتيس هول، 1988.