Версия: Discourse 2026.1.5 (ESR), плагин discourse-calendar
Краткое описание
Созданные события с установленным часовым поясом (timezone="Europe/Berlin" и showLocalTime="true") отображают время с ошибкой +1 час при скачивании файла .ics и его импорте в Outlook (Windows). В самом форуме время отображается корректно. Проблема затрагивает только новые события, то есть импорт через файл .ics.
Воспроизведение
- Создайте событие (сегодня, в период летнего времени CEST/UTC+2): 17:00 – 19: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]
- «Добавить в календарь» → скачать файл
.ics. - Импортируйте файл в 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) вместо UTC (...Z). Outlook не понимает названия часовых поясов IANA (он использует идентификаторы Windows, такие как «W. Europe Standard Time») и, при отсутствии определения VTIMEZONE, использует фиксированное смещение UTC+1 (CET/зимнее время). В период летнего времени (CEST = UTC+2) это приводит к ошибке ровно +1 час. Перекрестная проверка: импорт того же файла в Google Calendar (который нативно поддерживает часовые пояса IANA) показывает корректное время 17:00.
Предложение: экспорт ICS должен либо использовать временные метки UTC с суффиксом Z, либо генерировать полный блок VTIMEZONE, включающий правила перехода на летнее время (см. также обсуждение соответствия спецификации ICS в теме LOCATION is not available in full ICS export).
Дополнительное наблюдение: Если то же самое событие создается без параметров timezone=/showLocalTime, то экспортируемый файл .ics использует UTC, и Outlook показывает +2 часа (поскольку 17:00 UTC = 19:00 CEST). Это документированное поведение для UTC, но оно дополнительно демонстрирует, что обработка часовых поясов при экспорте ICS вызывает путаницу у пользователей, ожидающих отображения локального времени.