Есть ли обходной путь из-за отсутствия формата Olsen TZ TZID в файле ICS

Недавно у меня возникла проблема с файлом ICS, который я получил по электронной почте. Моя копия Outlook 2010 не будет правильно определять часовой пояс. Вот как время начала собрания было представлено в файле ICS:

DTSTART;TZID=America/Los_Angeles:20110928T183000

Когда Outlook импортировал этот файл, он изменил время с 18:30 по тихоокеанскому времени до 7:30 вечера по тихоокеанскому времени. После некоторых экспериментов я смог получить файл ICS, который правильно импортирован в Outlook, изменив формат часового пояса:

DTSTART;TZID="Pacific Time":20110928T183000

После некоторых дальнейших исследований я обнаружил, что спецификация файлов ICS оставляет вопрос о идентификации часового пояса открытым, но предлагает использовать база данных Olsen TZ. Похоже, что команда Microsoft Outlook выбрала игнорировать это предложение.

Учитывая, что Outlook является довольно популярным календарным клиентом, существует ли надежный способ форматирования часовых поясов ICS для Outlook, который по-прежнему совместим с другими клиентами? Моя самая большая забота об этой проблеме - это тихая ошибка во время импорта Outlook. Пользователи могут легко появиться на встречу в неподходящее время, так как Outlook не дает никаких предупреждений о том, что он запутался в часовом поясе. Должны ли мы просто перенаправлять пользователей Outlook на другой формат?

Примечание. Я знаю, что этот вопрос похож на более ранний пост, но ссылки на это сообщение, похоже, истекли, и мне интересно, есть ли любые лучшие решения там.

Ответ 1

Трудно судить без полного файла iCalendar, но вы определили/у вас есть компонент VTIMEZONE в вашем файле календаря, который определяет, что должно быть в Америке /Los _Angeles?

Что-то вроде:

BEGIN:VTIMEZONE
TZID:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE

Ответ 2

Вместо того, чтобы добавлять определение часового пояса в файл ics, было бы лучше упомянуть время начала/окончания события в самом UTC. И тогда, потребитель файла ICS-outlook в вашем случае, должен иметь возможность выполнить преобразование часового пояса из UTC (из файла ics) в предпочтительный часовой пояс конечного пользователя, непосредственно перед тем, как сделать событие собрания на своих календарях.

Плюсы: Таким образом, вам не нужно самостоятельно устанавливать правильные временные смещения (компонент VTIMEZONE). Кроме того, файл ics намного меньше, чище, легко читается.

Литература: Даже google, похоже, сам обрабатывает тайм-слова в ics - Обработка часовых поясов Google

Надеюсь, что это поможет.

Ответ 3

Предположим, что спрашивающий живет в Лос-Анджелесе и использует OUTLOOK2010. И 20110928T183000 Время запуска основано на PDT Если вы хотите, чтобы встреча прошла успешно, вы добавляете элемент "Встреча", контакт и Google Map URL-адрес телефона, время открытия в описании. Конечно, к элементу собрания следует добавить Организатора и Участника, но его так сложно установить. И около 75 октетов возврат каретки и вставка места затруднены. Так что только набор организатора и посетителя пишите в описании.

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
VERSION:2.0
CALSCALE:GREGORIAN
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-WR-TIMEZONE:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20110928T183000
DTEND;TZID=America/Los_Angeles:20110928T203000
LOCATION:meeting room in Los Angeles
Description:maps link \nhttp... \n phone \n open at 10:00:AM(PDT)
UID:ev1
ORGANIZER;CN="ThisMeeting Orginizer":mailto:[email protected]
Contact:[email protected]
DTSTAMP:20111001T105433Z
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR