【问题标题】:.ics TZID and offset not working.ics TZID 和偏移量不起作用
【发布时间】:2019-01-31 17:06:32
【问题描述】:

我正在构建一个简单的 .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,它实际上都没有改变。偏移也不起作用。

知道可能是什么问题吗?

【问题讨论】:

    标签: timezone icalendar datetimeoffset


    【解决方案1】:

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

    那么我们看看您选择如何表示您的日期,即:按照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:欧洲/索非亚:20180825T120000。日历应用会将其转换为接收日历应用和设备的时区,同时考虑到任何夏令时。

    【讨论】:

    • 谢谢,我现在明白了。在将其发送到 ics 文件之前,我已经进行了一些更改以抵消开始和结束时间。我个人最喜欢Form#2 :)
    猜你喜欢
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多