تصدير تقويم/حدث ICS: وقت خاطئ (+1 ساعة) عند الاستيراد إلى Outlook مع TZID=Europe/Berlin

الإصدار: Discourse 2026.1.5 (ESR)، إضافة discourse-calendar

ملخص
تظهر الأحداث الجديدة التي تم إنشاؤها بـ منطقة زمنية محددة (timezone="Europe/Berlin" و showLocalTime="true") وقتاً خاطئاً بزيادة +1 ساعة عند تنزيل ملف .ics واستيراده في Outlook (Windows). الوقت صحيح داخل المنتدى نفسه. تتأثر الأحداث الجديدة فقط، أي الاستيراد عبر ملف .ics.

إعادة إنتاج المشكلة

  1. إنشاء حدث (اليوم، في وقت التوقيت الصيفي CEST/UTC+2): 5:00 مساءً – 7:15 مساءً بتوقيت برلين.
[event start="2026-08-11 17:00" status="public" name="testevent 2" timezone="Europe/Berlin" showLocalTime="true" end="2026-08-11 19:15"]
[/event]

  1. “إضافة إلى التقويم” → تنزيل ملف .ics.
  2. استيراد الملف إلى Outlook.

المتوقع: 11.08.2026، 17:00 – 19:15
الفعلي: 11.08.2026، 18:00 – 20:15 (+1 ساعة)

محتوى ICS (الذات صلة):

DTSTART;TZID=Europe/Berlin:20260811T170000
DTEND;TZID=Europe/Berlin:20260811T191500

(لا يحتوي الملف على كتلة VTIMEZONE لـ Europe/Berlin.)

التحليل / السبب المشتبه به
يحدد التصدير الوقت محلياً باستخدام TZID=Europe/Berlin (اسم IANA) بدلاً من التوقيت العالمي المنسق (...Z). لا يفهم Outlook أسماء المناطق الزمنية من IANA (فهو يستخدم معرفات Windows مثل “W. Europe Standard Time”)، وغياب تعريف VTIMEZONE يجعله يعتمد على الإزاحة الثابتة UTC+1 (CET/الوقت الشتوي). خلال الوقت الصيفي (CEST = UTC+2) يؤدي هذا إلى زيادة +1 ساعة بالضبط. التحقق المتقاطع: استيراد نفس الملف إلى Google Calendar (الذي يفهم مناطق IANA بشكل أصلي) يعرض الوقت الصحيح 17:00.

اقتراح: يجب أن يستخدم تصدير ICS إما طوابع زمنية بالتوقيت العالمي المنسق مع Z أو يولد كتلة VTIMEZONE كاملة تتضمن قواعد التوقيت الصيفي (انظر أيضاً النقاش حول الامتثال لمواصفات ICS في الموقع غير متاح في تصدير ICS الكامل).

ملاحظة إضافية: عند إنشاء نفس الحدث بدون timezone=/showLocalTime، يستخدم ملف .ics المُصدّر التوقيت العالمي المنسق ويظهر Outlook +2 ساعات (بما أن 17:00 بالتوقيت العالمي = 19:00 بتوقيت CEST). هذا هو السلوك الموثق للتوقيت العالمي المنسق، لكنه يوضح أيضاً أن التعامل مع المناطق الزمنية حول تصدير ICS محير للمستخدمين الذين يتوقعون أوقاتاً محلية.

للمقارنة، كنت أقوم بتشغيل مضيف Discourse وحاوية التطبيق في المنطقة الزمنية المحلية المعتمدة من IANA بدلاً من UTC بسبب سلوك المنطقة الزمنية للتقويم في السابق.

تم ضبط مضيفي باستخدام:

timedatectl set-timezone Europe/London

ويحتوي ملف app.yml الخاص بي على:

- exec: ln -fs /usr/share/zoneinfo/Europe/London /etc/localtime
- exec: dpkg-reconfigure --frontend noninteractive tzdata

هذا يعني أن كلًا من مضيفي وحاوية Discourse يستخدمان منطقة Europe/London، بما في ذلك التغيير التلقائي بين GMT وBST.

قد يكون من المفيد اختبار ما يعادل ذلك باستخدام Europe/Berlin في تثبيتك لمعرفة ما إذا كان استيراد ملف .ics الناتج إلى Outlook يتم بشكل صحيح:

timedatectl set-timezone Europe/Berlin

وفي قسم run:،

- exec: ln -fs /usr/share/zoneinfo/Europe/Berlin /etc/localtime
- exec: dpkg-reconfigure --frontend noninteractive tzdata

أكون مهتمًا بمعرفة ما إذا كان ذلك يغير استيراد حدث برلين الساعة 17:00 من الاستيراد في الساعة 18:00 إلى الساعة 17:00 المتوقعة.

إذا كان الأمر كذلك، فإن ذلك يشير إلى أن المنطقة الزمنية لـ Discourse/الحاوية تؤثر على التصدير؛ وإذا لم يكن الأمر كذلك، فمن المرجح أن المشكلة المتعلقة بـ VTIMEZONE/التعامل مع Outlook تكون مستقلة عن المنطقة الزمنية للخادم.