كيف تعمل المناطق الزمنية حقًّا
· 4 دقيقة قراءة
المنطقة الزمنية ليست شريحة من الكرة الأرضية، بل مجموعة قواعد مسمّاة عمّا أظهرته ساعة في مكان بعينه، وما تُظهره، وما يُنتظر أن تُظهره. هذا التمييز هو الموضوع كله.
اسأل أي أحد تقريبًا عن معنى المنطقة الزمنية، فسيصف لك شريطًا رأسيًّا على خريطة: العالم مقسومًا إلى أربع وعشرين شريحة متساوية، بين كل واحدة والأخرى ساعة، يحكمها خط الطول. هذا التصور مرتّب وسهل التذكر، وخاطئ على نحو سيكلّفك اجتماعًا في نهاية المطاف.
المنطقة الزمنية مجموعة قواعد مسمّاة، تتولاها حكومة، عمّا تُظهره الساعات في إقليم بعينه. وهذه القواعد قابلة للتغير. تتغير لأسباب سياسية واقتصادية، وأحيانًا بإشعار مدته أسبوعان. خط الطول هو حيث بدأت الفكرة؛ وليس حيث انتهت.
من أين جاءت الفكرة
قبل ثمانينيات القرن التاسع عشر كانت كل بلدة تحفظ وقتها الخاص، مضبوطًا على الظهر المحلي — اللحظة التي تعبر فيها الشمس خط الزوال فوق الرأس. كانت بريستول متأخرة عن لندن بعشر دقائق، ولم يكترث أحد، لأن لا شيء كان يسافر بسرعة تكفي لتصير العشر دقائق ذات شأن.
غيّرت السكك الحديدية ذلك. جدول يقول إن القطار يغادر في 10:15 لا نفع فيه إذا كانت 10:15 تعني شيئًا مختلفًا عند كل طرف من الخط؛ وبحلول أربعينيات ذلك القرن كانت شركات السكك البريطانية قد فرضت ببساطة توقيت لندن على شبكتها كلها. تبعتها الولايات المتحدة في 1883، إذ قسّمت شركات السكك البلاد إلى أربع مناطق من تلقاء نفسها. ثم جعل مؤتمر خط الطول الدولي عام 1884 غرينتش خطَّ الطول الأول، فأعطى العالم مرجعًا مشتركًا يُقاس منه.
المهم في هذا التاريخ أن المناطق الزمنية اختُرعت لحل مشكلة تنسيق، اخترعتها المؤسسات التي واجهت تلك المشكلة. ولم تكن قط وصفًا لموضع الشمس.
ماذا تحوي المنطقة فعلًا
السجل المعتمد هو قاعدة بيانات المناطق الزمنية IANA، وتُسمى أيضًا tzdata أو قاعدة أولسون. وهي ملف نصي يُحدَّث عدة مرات في السنة، وكل نظام تشغيل ومتصفح ولغة برمجة تستعملها تقرأ نسخة منه.
تسجّل لكل منطقة:
- معرِّفًا مثل
America/New_YorkأوAsia/Kathmandu - الفرق عن UTC الذي سرى في كل حقبة من تاريخ تلك المنطقة
- قواعد تغيُّر ذلك الفرق، إن كان يتغير
- اختصارًا لكل حقبة، حيث يوجد
تتبع المعرِّفات صيغة منطقة/موضع، والموضع مدينة ممثِّلة لا بلد — لأن البلدان تنقسم وتتحد وتغيّر قواعدها بمعزل عن حدودها. وُجد America/Argentina/Buenos_Aires لأن مقاطعات الأرجنتين حفظت يومًا أوقاتًا مختلفة بعضها عن بعض.
وانتبه إلى ما ليست المنطقة إياه: ليست فرقًا. America/New_York ليست «UTC-5». هي منطقة فرقها UTC-5 في جزء من السنة وUTC-4 في بقيتها، وظلت على UTC-5 طوال العام إبان الحرب العالمية الثانية، وعملت بقواعد مختلفة قبل 1966. وتخزين «UTC-5» وتسميته نيويورك هو أشيع خطأ في المناطق الزمنية داخل البرمجيات.
القواعد تتغير، ولا تتغير تدريجيًّا
في 2016 تخلّت تركيا عن التوقيت الصيفي بإشعار نحو ثلاثة أسابيع، وبقيت على UTC+3 بصفة دائمة. وفي 2018 حرّكت كوريا الشمالية ساعاتها 30 دقيقة لتعود إلى موازاة الجنوب. وفي 2022 ألغت إيران التوقيت الصيفي؛ وفي العام نفسه أسقطته المكسيك عن معظم أراضيها. وأعادته مصر في 2023 بعد أن ألغته في 2014.
كل واحد من هذه كان إصدارًا من tzdata، وكل واحد كسر كل نظام يحمل جدول فروق مكتوبًا في شفرته. لهذا يقرأ المحرك وراء كل صفحة في هذا الموقع الفروق من نسخة tzdata التي تحملها بيئة التشغيل، لا من شيء مخزّن هنا. البناء الجديد يلتقط القواعد الجديدة؛ ولا شيء يحتاج إلى تحرير.
لماذا ليست الفروق كلها ساعات كاملة
نحو خُمس سكان العالم يعيشون على فرق ليس عددًا صحيحًا من الساعات عن UTC. الهند على UTC+05:30، اختيرت منطقة تسوية واحدة لبلد يتسع لاثنتين. ونيبال على UTC+05:45، وتلك الخمس والأربعون دقيقة تؤكد جزئيًّا استقلالها عن التوقيت الهندي. وجزر تشاتام على UTC+12:45. ونيوفاوندلاند على UTC-03:30.
والبرمجيات التي تفترض أن الفروق ساعات كاملة لا تكتفي بالتقريب: إنها تنتج لمئات الملايين إجابات تخطئ بثلاثين أو خمس وأربعين دقيقة، وهذا بالضبط حجم الخطأ الذي يُكتشَف أثناء المكالمة لا قبلها.
اليومان اللذان لا يكون فيهما التوقيت المحلي دالة
يخلق التوقيت الصيفي انقطاعين سنويين، وهما سبب كون «حوِّل هذا التوقيت المحلي» أصعب مما يبدو.
التقديم يحذف ساعة. في نيويورك يوم التحوّل، تأتي بعد 01:59:59 مباشرةً 03:00:00. والتوقيت المحلي 02:30 لا يقع. فإن أدخله المستخدم، فلا وجود للحظة صحيحة تُعاد — بل سياسات فقط لما يُعاد بدلًا منها.
التأخير يكرر ساعة. تقع 01:30 مرتين، مرة بالتوقيت الصيفي ومرة بعدها بساعة بالتوقيت القياسي. والتوقيت المحلي وحده مبهم فعلًا؛ يلزم معرفة أي الوقوعين قُصد، ونادرًا ما تسأل الواجهات عن ذلك.
كل أداة في هذا الموقع تحسم الحالتين صراحةً وتخبرك بما فعلت. أما اختيار إحداهما في صمت فهو الطريق الذي ينتهي به موعد في التقويم إلى ساعة خاطئة لا يلحظها أحد حتى المكالمة.
ما معنى ذلك عمليًّا
تنبثق من هذه الآلية ثلاث قواعد، وتغطي معظم ما يسوء:
- خزّن اللحظات لا الأوقات المحلية. طابع UTC الزمني غير ملتبس. أما التوقيت المحلي فهو طابع زمني زائد منطقة زائد سياسة لليومين الشائكين.
- خزّن معرّف المنطقة لا الفرق.
Europe/Londonينجو من تغيّر القواعد؛ وUTC+0لا ينجو، وهو خاطئ نصف السنة على أي حال. - حوِّل عند العرض، بواسطة tzdata الخاصة ببيئة التشغيل. لا عند التخزين، ولا أبدًا من جدول تتولى صيانته بنفسك.
وللسبب نفسه يظل هذا الموقع يقول عن الفروق «بحسب آخر بناء»، ويحسب الأوقات الحالية في متصفحك بدلًا من ذلك. فهذه القواعد ليست ملكًا لنا كي نجمّدها.