.ics TZID 和偏移量不起作用

.ics TZID and offset not working

我正在构建一个简单的 .ics 文件,一切看起来都很好。然而,无论我用 .ics 做什么,当我在 phone 上打开它时,它显示错误的开始和结束时间(+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……都没有改变。偏移量也不起作用。

知道问题出在哪里吗?

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

然后我们看看您选择如何表示您的日期,即:根据 https://www.rfc-editor.org/rfc/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:Europe/Sofia:20180825T120000。考虑到任何夏令时,日历应用会将其转换为接收日历应用和设备的时区。