Импорт ICS в Календарь Google с правильным часовым поясом

Я пытаюсь импортировать простой файл ics в календарь Google. Однако, хотя у меня есть указанный часовой пояс, Календарь Google по-прежнему импортирует неправильное время события. (Хотя он говорит, что неправильное время находится в правильном часовом поясе.)

вот пример моего файла ics:

BEGIN:VCALENDAR
BEGIN:VEVENT
DESCRIPTION: Test_Description
DTEND;TZID=US-Pacific:20140606T180000
DTSTART;TZID=US-Pacific:20140606T170000
LOCATION:Test_Location
SUMMARY:Test_Summary
UID:20140606T150000@NL
END:VEVENT
END:VCALENDAR

это событие должно появиться 6 июня, с 5 вечера до 6 вечера по Тихоокеанскому стандартному времени. Тем не менее, в моем календаре это происходит 6 июня, с 10AM-11AM ПСТ.

Я думаю (хотя и не реализовал) хак, чтобы просто изменить все на UTC и настроить время события соответственно может работа. Однако это было бы немного раздражает для реализации, и, честно говоря, Google Calendar должен иметь возможность обрабатывать этот простой импорт.

есть ли у кого-нибудь предложения по этому поводу или какие-либо ошибки в моем файле ICS?

спасибо!

2 ответов


обычно требуется включить VTIMEZONE объекты. Многие люди начинают опускать это, но если вы это сделаете, по крайней мере используйте идентификатор olson. Этого должно быть достаточно для Google calendar, чтобы подобрать правильный часовой пояс.

примером идентификатора olson является Europe/Amsterdam. Найдите наиболее подходящий для вас идентификатор. Предположительно это что-то вроде America/Los_Angeles.


чтобы ваши ICS работали с Google " добавить по URL..."укажите временные метки в UTC и добавьте X-WR-TIMEZONE. Метки должны быть Z в конце пометить метку времени как UTC:

DTSTART:20140102T110000Z

также добавьте спецификацию часового пояса в VCALENDAR вот так:

X-WR-TIMEZONE:Europe/Zurich

после добавления календаря в Календарь Google часовой пояс должен быть правильно установлен в настройках календаря.

если вы используете PHP для генерации ICS, вы можете преобразуйте метки времени в UTC следующим образом:

// The timestamp in your local time and your local time zone
$timestamp = "01.01.2016 12:00";
$timezone = new DateTimeZone('Europe/Zurich');

// The UTC timezone
$utc = new DateTimeZone('UTC');

// Create a DateTime object from your timestamp using your local timezone
$datetime = DateTime::createFromFormat("d.m.Y H:i",$timestamp, $timezone);

// Set the timezone on the object to UTC.
$datetime->setTimezone($utc);

// Print the time in UTC and use the correct format for ICS
echo $datetime->format('Ymd\THis\Z');

это также работает на iPhone от Apple.