将ICS导入到具有正确时区的Google Calendar中



我试图导入一个简单的ics文件到谷歌日历。但是,即使我指定了时区,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月6日下午5点到6点之间。然而,在我的日历上,它显示发生在6月6日,从太平洋标准时间上午10点到11点。

我认为(虽然没有实现)一个hack只是改变一切为UTC和调整相应的事件时间可能工作。然而,这将是有点恼人的实现和老实说,谷歌日历应该能够处理这个简单的导入。

有没有人有任何建议来处理这个问题,或者看到我的ICS文件中的任何错误?

谢谢!

要使您的ICS与Google的"Add by URL…"一起工作,请指定您的UTC时间戳并添加X-WR-TIMEZONE。时间戳必须在末尾有Z,以将时间戳标记为UTC:

DTSTART:20140102T110000Z

还在VCALENDAR块中添加时区规范,如下所示:

X-WR-TIMEZONE:Europe/Zurich

在Google calendar中添加日历后,应该在日历设置中正确设置时区。

如果您使用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('YmdTHisZ');

通常需要包含VTIMEZONE对象。许多人开始忽略这一点,但如果您这样做,至少使用奥尔森标识符。这应该足以让谷歌日历选择正确的时区。

奥尔森标识符的一个例子是Europe/Amsterdam。查找最适合您的标识符。大概是America/Los_Angeles

相关内容

  • 没有找到相关文章

最新更新