فروق التوقيت العالمي المنسق التي ليست ساعات كاملة
· 4 دقيقة قراءة
يعيش نحو خُمس سكان العالم على فرق ليس عدداً صحيحاً من الساعات عن التوقيت العالمي المنسق. والبرمجيات التي تفترض غير ذلك لا تخطئ قليلاً بحقهم، بل تخطئ بثلاثين أو خمس وأربعين دقيقة، وهذا أسوأ.
التصور الذهني القائل بأربع وعشرين منطقة بفارق ساعة خاطئ على نحو مكلف: فهو ينتج شفرة تخطئ بثقة بمقدار ثلاثين أو خمس وأربعين دقيقة لما يزيد كثيراً على مليار إنسان. الخطأ بساعة كاملة يبدو خطأً على الأقل. أما الخطأ بخمس وأربعين دقيقة فيبدو خطأً مطبعياً، ويُشحن مع المنتج.
القائمة الكاملة
الفروق عند :30
| الفرق | أين |
|---|---|
| UTC-09:30 | جزر ماركيساس |
| UTC-03:30 | نيوفاوندلاند ولابرادور |
| UTC+03:30 | إيران |
| UTC+04:30 | أفغانستان |
| UTC+05:30 | الهند وسريلانكا |
| UTC+06:30 | ميانمار وجزر كوكوس |
| UTC+09:30 | وسط أستراليا — الإقليم الشمالي وجنوب أستراليا |
| UTC+10:30 | جزيرة لورد هاو (التوقيت القياسي) |
الفروق عند :45
| الفرق | أين |
|---|---|
| UTC+05:45 | نيبال |
| UTC+08:45 | جنوب شرق غرب أستراليا (يوكلا، بصورة غير رسمية) |
| UTC+12:45 | جزر تشاتام (التوقيت القياسي) |
الهند وحدها 1.4 مليار نسمة. أضف إيران وأفغانستان وميانمار وسريلانكا ونيبال فتتجاوز خُمس سكان الكوكب، قبل أن تحسب أستراليا أو كندا.
النوع الآخر من الفروق غير المعتادة
الفروق التي ليست ساعات كاملة هي الغرابة المعروفة. وثمة غرابتان أخريان لا تقلان أهمية.
المدى ست وعشرون ساعة لا أربع وعشرون. فكيريتيماتي في كيريباتي على UTC+14، وجزيرتا بيكر وهاولاند على UTC-12. هذا مدى من ست وعشرين ساعة، ما يعني وجود لحظات تكون فيها ثلاثة تواريخ تقويمية مختلفة قيد الاستعمال في وقت واحد في مكان ما من الأرض. وأي شفرة تفترض أن نافذة من يومين تغطي كل المناطق تخطئ مرتين في اليوم.
التوقيت الصيفي ليس ساعة دائماً. فجزيرة لورد هاو، وهي جزيرة أسترالية صغيرة يقيم فيها نحو 380 نسمة، تتحول بثلاثين دقيقة: UTC+10:30 شتاءً وUTC+11:00 صيفاً. وهي الموضع الوحيد على الأرض الذي يفعل ذلك، وأفضل حالة اختبار لمكتبة تواريخ — فأي تنفيذ يثبّت تحولاً مقداره ستون دقيقة يكون مخطئاً هناك ولا مكان سواه، ما يعني أنه سيجتاز كل اختبار آخر تكتبه.
ما الذي ينكسر
التقريب إلى أقرب ساعة. أشيع أنواع الإخفاق. فالشفرة التي تحسب الفرق بالساعات كعدد صحيح تقتطع الهند إلى +5 بصمت، وهذا خطأ بثلاثين دقيقة لكل مستخدم في البلد.
تخزين الفروق كأعداد صحيحة. عمودٌ في المخطط معرَّف كعدد ساعات لا يستطيع تمثيل كاتماندو. ويُكتشف ذلك عادةً بعد أن تكون البيانات قد دخلت فيه.
واجهات الشبكة المبنية على أعمدة الساعات. فأي تقويم أو مخطِّط يوزع اليوم على 24 خلية متساوية ويفترض أن الساعة المحلية لكل منطقة تنطبق على حد خلية، سيضع مناطق النصف ساعة والخمس وأربعين دقيقة في غير موضعها. والشريط في مخطِّط الاجتماعات بهذا الموقع يتخذ اللحظات أعمدةً بدل الساعات المحلية، فيُظهر صفُّ +05:45 الساعة 09:45 في العمود الذي يُظهر فيه صفُّ التوقيت العالمي 04:00 — وهذه هي الحقيقة، لا كذبةٌ أكثر ترتيباً.
حساب المدد عبر تغيّر صيفي بثلاثين دقيقة. فافتراض أن انتقال التوقيت الصيفي يساوي 3,600,000 مللي ثانية بالضبط يعطي الجواب الخطأ في جزيرة لورد هاو وحدها.
كيف تصيب
العلاج هو نفسه الذي يعالج كل علل المناطق الزمنية تقريباً: لا تحسب فرقاً بنفسك أبداً. اسأل المنصة.
كل بيئة تشغيل حديثة تحمل قاعدة IANA وستخبرك بفرق منطقة ما في لحظة بعينها، بالدقائق وبدقة، بما في ذلك كاتماندو ولورد هاو. وفي جافاسكربت هذا هو Intl.DateTimeFormat مع timeZoneName: 'longOffset'، أو مقارنة قراءة ساعة المنطقة بالتوقيت العالمي المنسق — وهو النهج الذي يتبعه محرك هذا الموقع، لأنه يبقى دقيقاً حتى مع فروق التوقيت المحلي المتوسط دون الدقيقة في بيانات ما قبل 1900.
ثم تمسّك بثلاث قواعد:
- الفروق دقائق لا ساعات أبداً. فإن سُمّي متغيّر
offsetHoursفهو علة بالفعل. - اختبر على كاتماندو ولورد هاو. فهما يكسران الافتراضين اللذين يدعك كل شيء آخر تحتفظ بهما.
- لا تقرّب منطقة زمنية أبداً. فإن اضطر عرضٌ إلى التقريب فقل ذلك؛ ولا تحرّك ساعة مستخدم ثلاثين دقيقة في صمت لتسهيل تخطيط الصفحة.
مثال محلول: ماذا تفعل خمس وأربعون دقيقة بشبكة
خذ مخطِّط اجتماعات يوزع اليوم على 24 عموداً، عموداً لكل ساعة، ويظلّل ساعات عمل كل مشارك. التنفيذ الساذج يحسب كل صف بإزاحة الصف الأساس بمقدار فرق المنطقة بالساعات.
مع لندن مقابل نيويورك ينجح ذلك: فصف نيويورك هو صف لندن مزاحاً خمس خلايا يميناً. أما مع لندن مقابل كاتماندو فلا. فكاتماندو متقدمة بخمس ساعات وخمس وأربعين دقيقة، أي 5.75 خلية، ولا وجود لثلاثة أرباع خلية. فيقرّب التنفيذ — إلى 6 عادةً — وتصبح كل قراءة في ذلك الصف أبكر بربع ساعة.
الخطأ صغير بما يكفي لينجو من المراجعة، وكبير بما يكفي ليُحدث أثراً: فاجتماع الساعة 09:00 الذي تقول الشبكة إنه 09:00 في كاتماندو هو في الواقع 08:45 هناك، ومن ينضم يتأخر خمس عشرة دقيقة عن يومه هو.
والعلاج هو الكفّ عن معاملة الأعمدة كساعات. اجعل كل عمود لحظة، واسأل المنصة عما تقرؤه ساعة الحائط المحلية في كل منطقة عند تلك اللحظة. عندها يُظهر صف +05:45 الساعة 09:45 حيث يُظهر صف التوقيت العالمي 04:00 — غير محاذٍ للشبكة على نحو ظاهر، وهذا هو العرض الأمين. ومخطِّط الاجتماعات في هذا الموقع يفعل ذلك بالضبط، والحافة المتعرجة في صف كاتماندو ميزة لا عيب.
الفروق التاريخية أغرب بعد
قبل التوحيد القياسي كانت الفروق توقيتاً شمسياً محلياً متوسطاً ودقيقة إلى الثانية. وقاعدة IANA تسجلها.
فقد سارت هولندا على UTC+00:19:32.13 من 1909 إلى 1937. وكانت ليبيريا على UTC-00:44:30 حتى 1972. اسأل بيئة تشغيل عن فرق Europe/Amsterdam في تاريخ من 1920 فتعطيك القيمة الدقيقة بثوانيها.
ولهذا تحسب دالة الفروق تحت هذا الموقع بالثواني ولا تقرّب إلى الدقائق إلا في طبقة العرض. فمحركٌ يخزّن الدقائق سيفقد في صمت اثنتين وثلاثين ثانية من التاريخ الهولندي — وهو ما لن يلحظه أحد، وسيظل مع ذلك خطأً.