شرح الطابع الزمني Unix: دليل كامل
الطابع الزمني Unix هو أحد أكثر المفاهيم انتشارًا في الحوسبة، ومع ذلك لا يزال العديد من المطورين يجدون صعوبة في المناطق الزمنية والتحويلات والتحذيرات المنصة. سواء كنت تقوم بتسجيل الأحداث أو جدولة المهام أو مزامنة البيانات، فإن فهم الطابع الزمني Unix ضروري لمعالجة موثوقة للوقت. يغطي هذا الدليل كل شيء من الأساسيات إلى مشكلة عام 2038 وما بعدها.
ما هو الطابع الزمني Unix؟
الطابع الزمني Unix، المعروف أيضًا باسم وقت Unix أو وقت Epoch، هو عدد الثواني (أو الميلي ثانية) التي انقضت منذ 1 يناير 1970 عند 00:00:00 UTC. هذه اللحظة تسمى عصر Unix. إنه معيار التوقيت العالمي في الحوسبة.
جمال الطابع الزمني Unix هو بساطته: إنه رقم واحد. لا توجد مناطق زمنية، لا تنسيقات غامضة، لا قواعد التوقيت الصيفي. 1700000000 يمثل لحظة دقيقة واحدة في كل مكان على الأرض. هذه البساطة تجعله مثاليًا لتخزين ومقارنة وحساب التواريخ والأوقات في البرمجة.
صيغ الطابع الزمني
- الطابع الزمني بالثواني: الدقة القياسية. 10 أرقام. يستخدم في معظم أنظمة Unix وواجهات برمجة التطبيقات وقواعد البيانات.
- الطابع الزمني بالميلي ثانية: 13 رقمًا. شائع في JavaScript (Date.now()) وسجلات التطبيق.
- الطابع الزمني بالميكروثانية: 16 رقمًا. يستخدم في قياس الأداء وأنظمة التداول عالية التردد.
- الطابع الزمني بالنانو ثانية: 19 رقمًا. يستخدم في قياس الأداء عالي الدقة وأنظمة الوقت الفعلي.
- التخزين: تخزين الطوابع الزمنية بـ 64-bit (عدد صحيح). هذا يحل مشكلة 2038 ويدعم التواريخ حتى 292 مليار سنة.
تحويل الطوابع الزمنية
تأتي طوابع Unix الزمنية بعدة دقة:
| التنسيق | الوصف | مثال |
|---|---|---|
| Unix (ثوانٍ) | 10 أرقام، دقة الثانية | 1700000000 |
| Unix (ملي ثانية) | 13 رقمًا، دقة الملي ثانية | 1700000000000 |
| ISO 8601 | تاريخ ووقت ISO القياسي | 2026-05-20T15:30:00Z |
| RFC 2822 | تنسيق تاريخ الإنترنت | Wed, 20 May 2026 15:30:00 +0000 |
| JavaScript | new Date(ts * 1000) | Math.floor(Date.now() / 1000) |
الطابع الزمني Unix في لغات البرمجة
الطابع الزمني بالثواني
يمكن تحويل الطوابع الزمنية إلى تنسيقات تاريخ قابلة للقراءة البشرية والعكس باستخدام وظائف تاريخ اللغة المضمنة. فيما يلي أمثلة في اللغات الشائعة:
الطابع الزمني بالميلي ثانية
الطوابع الزمنية Unix هي العمود الفقري للعديد من وظائف الحوسبة:
الطابع الزمني بالميكروثانية
مشكلة عام 2038 هي مشكلة مماثلة لمشكلة عام 2000 التي تؤثر على الأنظمة التي تخزن الطابع الزمني Unix كعدد صحيح 32-bit بإشارة. في 19 يناير 2038 عند 03:14:07 UTC، سيصل العدد إلى أقصى قيمة له (2,147,483,647) وسيتجاوز إلى قيمة سالبة، مما يتسبب في فشل الأنظمة.
الطابع الزمني بالنانو ثانية
الحل هو الانتقال إلى تخزين 64-bit، والذي يدفع المشكلة إلى ما يقرب من 292 مليار سنة في المستقبل. معظم الأنظمة الحديثة تستخدم بالفعل 64-bit، لكن الأنظمة المضمنة والقديمة قد تظل متأثرة. هذا يشبه مشكلة Y2K لكنه أقل انتشارًا لأن الانتقال إلى 64-bit كان يحدث بالفعل لأسباب أخرى.
حالات استخدام الطابع الزمني
استخدم أدواتنا المجانية لاكتشاف الطوابع الزمنية وتحويلها.
عصر Unix هو 1 يناير 1970 عند 00:00:00 UTC. إنها النقطة المرجعية التي يتم قياس الطوابع الزمنية Unix منها. قيم الطابع الزمني تمثل الثواني (أو الميلي ثانية) المنقضية منذ هذه اللحظة.
مشكلة عام 2038
استخدم أدوات تحويل الطابع الزمني عبر الإنترنت أو وظائف التاريخ المضمنة في لغة البرمجة. على سبيل المثال، في JavaScript: new Date(timestamp * 1000). في Python: datetime.fromtimestamp(timestamp). يمثل الطابع الزمني 1700000000 14 نوفمبر 2023 عند 22:13:20 UTC.
مشكلة عام 2038 تؤثر على الأنظمة التي تخزن الطوابع الزمنية Unix كأعداد صحيحة 32-bit بإشارة. في 19 يناير 2038، سيصل العدد إلى أقصى قيمة له ويتجاوز، مما يتسبب في فشل حسابات الوقت. الحل هو استخدام أعداد صحيحة 64-bit، والتي تدعمها معظم الأنظمة الحديثة بالفعل.
أفضل الممارسات
لا، الطابع الزمني Unix دائمًا UTC. إنه عدد الثواني منذ عصر Unix في UTC. يجب أن يتم تحويله إلى تواريخ وأوقات محلية فقط عند عرضه للمستخدمين. هذا يجعل الطوابع الزمنية Unix مثالية للتخزين والمقارنة عبر المناطق الزمنية المختلفة.
- التنسيق: استخدام تنسيق ISO 8601 للعرض القابل للقراءة البشرية. الطوابع الزمنية Unix للتخزين والحسابات.
- المنطقة الزمنية: تخزين الطوابع الزمنية دائمًا بـ UTC. التحويل إلى التوقيت المحلي فقط عند العرض للمستخدمين.
- المقارنة: مقارنة الطوابع الزمنية مباشرة كأرقام. لا تحليل أو تنسيق مطلوب.
- التحويل: استخدام وظائف التاريخ المضمنة في اللغة للتحويلات. لا تكتب تحويلات مخصصة.
الأسئلة الشائعة
- التسجيل: استخدام دقة الميلي ثانية على الأقل. إضافة معرف المنطقة الزمنية عند عرض التوقيت المحلي.
- Forgetting to account for time zones when displaying timestamps
- Using 32-bit integers for timestamp storage on systems approaching the 2038 limit
- Not handling negative timestamps for dates before January 1, 1970
- Assuming all days have 86400 seconds when performing date arithmetic across daylight saving time boundaries
الطابع الزمني بالثواني هو الدقة القياسية (10 أرقام)، بينما الطابع الزمني بالميلي ثانية أكثر دقة (13 رقمًا). على سبيل المثال، 1700000000 (ثوانٍ) مقابل 1700000000000 (ميلي ثانية). يستخدم JavaScript الميلي ثانية، بينما تستخدم معظم أنظمة Unix واللغات الثواني.
محول الطابع الزمني UnixFrequently Asked Questions
المناطق الزمنية والطابع الزمني Unix
The Unix epoch is January 1, 1970, 00:00:00 UTC. It serves as the reference point for all Unix timestamp calculations. Timestamps represent the number of seconds that have elapsed since this moment.
تنسيق ISO 8601
The 32-bit signed integer Unix timestamp will overflow on January 19, 2038, known as the Year 2038 problem. Systems using 64-bit integers will not face this issue for approximately 292 billion years. Most modern systems have already transitioned to 64-bit timestamps.
Python
No, Unix timestamps are always in UTC and are not affected by time zones. The same timestamp represents the same instant worldwide. Time zone conversion only happens when displaying the timestamp as a human-readable date.
JavaScript
Standard Unix timestamps measure seconds since the epoch, while JavaScript and some APIs use milliseconds. A millisecond timestamp is 1000 times larger. For example, 1700000000 seconds equals 1700000000000 milliseconds.
Java
Technically, Unix timestamps ignore leap seconds. Every day is treated as having exactly 86400 seconds. This means Unix time can drift slightly from UTC when leap seconds are inserted, but in practice this rarely causes issues.