.ics TZID和偏移量不起作用

时间:2018-08-25 13:09:34

标签: timezone icalendar datetimeoffset

我正在构建一个简单的.ics文件,一切看起来都很好。但是,无论我使用.ics做什么,当我在手机上打开它时,它都会显示错误的开始时间和结束时间(+3小时)。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
X-WR-TIMEZONE:Europe/Sofia
CALSCALE:GREGORIAN
BEGIN:VTIMEZONE
TZID:Europe/Sofia
TZOFFSETFROM:+0000
TZOFFSETTO:-0300
TZNAME:CET
END:VTIMEZONE
BEGIN:VEVENT
LOCATION:Some location
DESCRIPTION:Testing Description
DTSTART:20180825T120000Z
DTEND:20180825T141000Z
SUMMARY:This is a short summary
URL;VALUE=URI:www.someurl
DTSTAMP:20180825T155441Z
UID:5b8151913501c
END:VEVENT
END:VCALENDAR

因此,与其显示开始时间12点(20180825T120000Z),而是显示15:00 奇怪的是,实际上无论我使用什么TZID,都没有任何变化。偏移也不起作用。

任何想法可能是什么问题?

1 个答案:

答案 0 :(得分:2)

它在做正确的事情。请参考RFC5545规范。 https://tools.ietf.org/html/rfc5545#section-3.6.5。 VTIMEZONE只是提供了时区的定义,即基本偏移量和任何夏令时更改等。我怀疑许多应用程序可能会使用它们自己的定义,并且/或者如果正确,定义应该相同。

因此,接下来我们看您如何选择代表日期,即:https://tools.ietf.org/html/rfc5545#section-3.3.5的表格#2,日期和UTC时间。然后,日历应用程序将根据您的应用程序设置的时区在DTSTART中调整UTC时间。您的应用似乎设置为与UTC偏移3小时的时区。

如果您确实希望日期是您所在时区的中午12点,那么您可以选择:

  • 表格1:浮动日期或本地日期时间20180825T120000(NO Z)。它将在每个时区中显示为12(不进行调整),对于在当地时间一天中的提醒等功能很有用。
  • 表格2:UTC时间20180825T090000Z(生产代码应将本地时间从UTC + 3调整为基准UTC时间)
  • 表格3:具有当地时间和时区参考的日期。 IE浏览器 TZID:欧洲/索非亚:20180825T120000。考虑到任何夏令时,日历应用程序会将其转换为接收日历应用程序和设备的时区。