جودة البيانات

انتقالات التوقيت الصيفي والطلبات التي تتعطل عندها

مرتين في السنة، في المناطق التي تطبّق التوقيت الصيفي، يحدث للساعة أمر غريب لا تأخذه معظم البرمجيات في الحسبان. فعندما تُقدَّم الساعات، تختفي ساعة من التوقيت المحلي ببساطة، لذا فإن طابعًا زمنيًا مثل «2:30 صباحًا» في ذلك التاريخ لم يحدث قط. وعندما تُؤخَّر الساعات، تتكرر ساعة مرتين، لذا فإن «1:30 صباحًا» حدثت مرة قبل التغيير ومرة بعده، والطابع الزمني المحلي المجرد دون أي معلومات أخرى لا يمكنه أن يخبرك أيهما المقصود.

هذه ليست حالة حدّية نادرة لا تهم إلا في حالات استخدام غريبة. إنها حدث روتيني في التقويم يتكرر كل عام في كل منطقة تستخدم التوقيت الصيفي، وهو يعطّل بصمت أي شيفرة تعامل التوقيت المحلي على أنه محدد دائمًا بشكل واضح. فنظام الجدولة الذي يخزن «احجز هذا للساعة 1:45 صباحًا» دون أن يخزن أيضًا فرق توقيت UTC لحظة الحجز لا يمكنه أن يعرف، بعد أشهر، أي الساعتين 1:45 صباحًا كانت المقصودة إذا وقع الحجز في ليلة التحول.

الممارسة الأكثر أمانًا هي تخزين الطوابع الزمنية بتوقيت UTC في كل مكان داخليًا، وعدم التحويل إلى التوقيت المحلي إلا للعرض. فتوقيت UTC لا يعرف التوقيت الصيفي ولا الالتباس، لذا متى سُجّلت لحظة بهذه الطريقة، تبقى صحيحة بغض النظر عما يحدث لقواعد الساعة المحلية لاحقًا. حوّل إلى المنطقة الزمنية المحلية للمستخدم عند عرضها له فقط، باستخدام القواعد الحالية لتلك المنطقة في تلك اللحظة تحديدًا، وهذا بالضبط سبب أن الاستعلام عن المنطقة الزمنية الذي يقبل نقطة زمنية محددة، لا موقعًا فحسب، يستحق الاستخدام بدلًا من تخزين فرق توقيت مؤقتًا مرة واحدة وإعادة استخدامه.

من الحالات الحدّية التي تستحق اختبارها صراحة إذا كنت تبني أي شيء يجدول الأحداث أو يسجلها: حجز في الساعة غير الموجودة أثناء تحول تقديم الساعة في الربيع، وطابع زمني خلال الساعة المكررة أثناء تحول تأخير الساعة في الخريف، وحدث مجدول يعبر تاريخه تحولًا بين وقت إنشائه ووقت وقوعه. وليست أي من هذه الحالات افتراضية. فهي تحدث وفق جدول ثابت ومتوقع كل عام، واختبارها مرة واحدة أثناء التطوير أرخص بكثير من تتبع تذكرة دعم عن اجتماع بدا أنه تحرك بساعة.

إذا كان نظامك يحتاج إلى فرق التوقيت الصحيح للحظة محددة لا إلى اسم المنطقة فقط، فاطلبه مباشرة بدلًا من اشتقاقه من قيمة مخزنة مؤقتًا. تقبل خدمة الاستعلام عن المنطقة الزمنية من My Geocode لحظة محددة وتطبّق قواعد التوقيت الصيفي لذلك التاريخ بالضبط، لذا يكون فرق التوقيت المُعاد صحيحًا حتى عند حافة التحول تمامًا.