اختبار بيانات الموقع بالحالات الحدّية، لا بالمسارات المثالية فقط
عنوان في وسط مدينة مرسومة خرائطها جيدًا لا يخبرك تقريبًا بشيء عن طريقة تعامل نظامك مع طريق ريفي أو حدود متنازع عليها أو استعلام قرب القطبين. اختبر الحالات الصعبة عن قصد.
المنطقة الزمنية قرار سياسي قبل أن تكون قرارًا جغرافيًا. الخط الفاصل بين منطقتين، وقرار اعتماد التوقيت الصيفي، والتاريخ الدقيق لتقديم الساعة أو تأخيرها، كلها تحددها حكومات وطنية أو محلية، وأي منها يمكن أن يتغير. ولهذا لا يمكن أن تكون بيانات المناطق الزمنية جدولًا ثابتًا لفروق التوقيت مجمدًا عند نقطة ما في الماضي. بل يجب أن تكون سجلًا مُصانًا للتاريخ والقواعد الحالية والتغييرات المستقبلية المعروفة.
قاعدة بيانات المناطق الزمنية IANA هي المرجع الذي تعتمد عليه معظم البرمجيات لهذا السبب بالضبط. يتتبع القائمون عليها تغييرات التوقيت القانوني فور إعلان الحكومات عنها، سواء كان ذلك تحولًا في سياسة التوقيت الصيفي، أو تغييرًا في فرق التوقيت عن UTC الذي تعتمده منطقة ما، أو تعديلًا للحدود بين المناطق داخل بلد واحد. كل منطقة مسماة، مثل Europe/Amsterdam أو America/Chicago، لا تحمل قاعدة حالية فحسب بل سجلًا كاملًا للقواعد السابقة، لأن البرمجيات تحتاج غالبًا إلى حساب فرق التوقيت الصحيح لتاريخ في الماضي، لا لليوم فقط.
هذا السجل أهم مما قد يبدو. الطابع الزمني من عدة سنوات مضت يحتاج إلى فرق التوقيت الذي كان ساريًا فعلًا في ذلك التاريخ، وقد يختلف عن فرق التوقيت الساري اليوم إذا تغيرت القواعد في الأثناء. الاستعلام عن المنطقة الزمنية الذي لا يعرف إلا القاعدة الحالية سينتج بصمت نتائج خاطئة للتواريخ الماضية أو المستقبلية، ولهذا يستحق الأمر أن تسأل API المنطقة الزمنية عن المنطقة في لحظة محددة، لا عن اسم المنطقة فقط، كلما كان التاريخ مهمًا.
ولهذا أيضًا ينبغي أن يعيد الاستعلام عن المنطقة الزمنية اسم المنطقة الفعلي لا مجرد فرق توقيت رقمي. Europe/Amsterdam تحمل وراءها كل السجل ومنطق التوقيت الصيفي. أما +01:00 فلا يصح إلا لجزء من السنة ولا يخبرك بشيء عن موعد تغيره. البرمجيات التي تخزن فرق التوقيت فقط لموقع ما ستفقد صحتها في المرة التالية التي يحدث فيها انتقال للتوقيت الصيفي، بينما البرمجيات التي تخزن اسم المنطقة تبقى صحيحة إلى أجل غير مسمى ما دامت قاعدة البيانات الأساسية محدثة.
يعيد الاستعلام عن المنطقة الزمنية في My Geocode اسم منطقة IANA وفرق التوقيت عن UTC معًا، ويقبل لحظة زمنية محددة بحيث يُطبَّق فرق التوقيت الصحيح، بما في ذلك التوقيت الصيفي، على ذلك التاريخ بالضبط بدلًا من افتراض أن قاعدة اليوم كانت سارية دائمًا.