اختبار بيانات الموقع بالحالات الحدّية، لا بالمسارات المثالية فقط
عنوان في وسط مدينة مرسومة خرائطها جيدًا لا يخبرك تقريبًا بشيء عن طريقة تعامل نظامك مع طريق ريفي أو حدود متنازع عليها أو استعلام قرب القطبين. اختبر الحالات الصعبة عن قصد.
من السهل أن تفترض أنك متى عرفت المنطقة الزمنية لدولة ما فقد عرفتها إلى الأبد. لكن في الواقع، تغيّر الحكومات سياسات المناطق الزمنية أكثر مما يدرك معظم الناس. فقد تقرر دولة التوقف عن تطبيق التوقيت الصيفي بعد العمل به لعقود. وقد تنقل دولة أخرى فرق توقيتها القياسي ساعة لتتوافق أكثر مع شريك تجاري رئيسي. وقد تعيد دولة كبيرة رسم الحدود الداخلية بين منطقتين من مناطقها مع تغيّر الإدارة الإقليمية. وليست أي من هذه الفئات افتراضية. فتغييرات كهذه تحدث في مكان ما من العالم بشكل منتظم إلى حد ما، حتى لو مرت على دولة بعينها سنوات أو عقود بين تغيير وآخر.
هذه بالضبط المشكلة التي وُجدت قاعدة بيانات المناطق الزمنية IANA لحلها. فبدلًا من تخزين فرق توقيت حالي واحد لكل دولة، تتتبع كل منطقة مسماة كتاريخ من القواعد عبر الزمن، مع إضافة مدخلات كلما أعلنت حكومة عن تغيير. والبرمجيات التي تسحب بياناتها من نسخة محدَّثة بانتظام من هذه القاعدة تلتقط التغييرات دون أي تعديل في شيفرتها. أما البرمجيات التي تثبّت فروق التوقيت لكل دولة في الشيفرة، ربما في جدول استعلام كُتب مرة واحدة خلال التطوير الأولي، فستنحرف بصمت نحو الخطأ في المرة التالية التي تغيّر فيها أي دولة مشمولة قواعدها، ولن يعلن هذا الخلل عن نفسه. بل ستبدأ ببساطة بإعادة أوقات محلية خاطئة لتلك الدولة إلى أن يلاحظ أحدهم ذلك.
وهذا أيضًا سبب خطورة تخزين فرق توقيت UTC وحده، منفصلًا عن منطقة مسماة، لأي بيانات يُراد استخدامها لأكثر من بضعة أشهر. ففرق التوقيت المسجل اليوم لقطة لقاعدة قد تتغير. أما اسم منطقة مثل Pacific/Auckland أو Asia/Kolkata فيحمل مرجعًا إلى مجموعة القواعد المحدَّثة، لذا ما دامت قاعدة البيانات الأساسية محدَّثة، تبقى الحسابات المعتمدة على ذلك الاسم صحيحة حتى بعد تغيّر القاعدة، دون أن تحتاج إلى المساس ببياناتك.
التوجيه العملي لكل من يبني على بيانات المناطق الزمنية بسيط. خزّن أسماء المناطق، لا فروق التوقيت الخام، في قاعدة بياناتك. وحدّث أي مكتبة أو مصدر بيانات للمناطق الزمنية تعتمد عليه وفق جدول معقول، لأن النسخة القديمة تتصرف تمامًا مثل جدول مثبّت في الشيفرة لحظة تغيير أي دولة مشمولة قواعدها. وتعامل مع الاستعلام عن المنطقة الزمنية كشيء تستدعيه من جديد للحسابات المرتبطة بتواريخ حقيقية متغيرة، لا كقيمة تخزنها مؤقتًا إلى أجل غير مسمى.
تعيد خدمة الاستعلام عن المنطقة الزمنية لدينا اسم منطقة IANA الحالي وفرق التوقيت لأي إحداثية، محسوبين وفق مجموعة قواعد محدَّثة بدلًا من جدول ثابت، وهذه هي الطريقة الوحيدة للبقاء على صواب مع تعديل الدول لقواعدها بمرور الوقت.