将 ICS 导入具有正确时区的 Google 日历

问题描述 投票:0回答:2

我正在尝试将一个简单的 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 月 6 日下午 5 点至下午 6 点发生。然而,在我的日历上,它显示为 6 月 6 日上午 10 点至上午 11 点(太平洋标准时间)。

我认为(虽然尚未实施)将所有内容更改为 UTC 并相应调整事件时间的 hack 可能会起作用。然而,这实施起来有点烦人,老实说 Google 日历应该能够处理这种简单的导入。 有人有任何建议来处理这个问题,或者在我的 ICS 文件中看到任何错误吗?

谢谢!

import calendar timezone icalendar
2个回答
11
投票
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');

这也适用于 Apple 的 iPhone。


4
投票
VTIMEZONE

对象。许多人开始忽略这一点,但如果你这样做,至少使用 olson 标识符。这应该足以让谷歌日历选择正确的时区。


奥尔森标识符的一个示例是

Europe/Amsterdam

。查找最适合您的标识符。想必这就是

America/Los_Angeles
    

© www.soinside.com 2019 - 2024. All rights reserved.