日历:ICS 文件缺少时区信息!

我看到另一篇帖子说要在这里发帖,原因不明,是关于日历的,但我认为 discourse 与此问题无关,但我们的帖子会在 7 天后关闭,所以 YOLO!

查看 .ics 文件规范,我不知道我们需要哪一个,但我们缺少这些……它们是:

  1. X-WR-TIMEZONE
  2. TZID
  3. X-LIC-LOCATION

所以我想时区设置应该被提取出来,并添加 X-WR-TIMEZONE 来匹配……当你从谷歌导入时,它会假定你的本地时区……但 GoDaddy 我怎么也找不到设置它的地方……而且它以前是有效的,因为我假设旧的 ics 日历有时间区信息

具有正确时区信息的示例……X-WR-TIMEZONE 和 X-LIC-LOCATION 已设置,并且事件具有 DTSTART;TZID=“America/Los_Angeles”:20160206T074400 和 DTEND;TZID=“America/Los_Angeles”:20160206T084400

我认为至少修复方法是添加 X-WR-TIMEZONE 和 X-LIC-LOCATION,并且正确的规范应该允许每个事件有自己的开始和结束时区……我敢肯定你们会乘坐飞机,当你们四处走动时,时区设置会根据日历上的设置进行调整

BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 19.0 MIMEDIR//EN
VERSION:2.0
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Appointment
LOCATION:Pune
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
DTSTART;TZID="America/Los_Angeles":20160206T074400
DTEND;TZID="America/Los_Angeles":20160206T084400
PRIORITY:5
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR

stephen_Hornak
ChristopherCamacho
Matt.Johnson
jacobfetzer

4 个赞

有这方面的新闻吗?ics 文件仍然缺少时区信息。因此,当用户将 Discourse 的 ics 文件导入日历时,他们会得到错误的时间。

我们生成的 ics 文件遵循 iCalendar 规范。具体来说,对于时间,我们生成以 Z 后缀的 UTC 时间戳(源代码 1源代码 2),这符合以下规定:

格式 #2:UTC 时间

      UTC 时间,或绝对时间,通过附加在时间值后面的大写字母 Z 后缀字符(UTC 标识符)来识别。例如,以下表示 UTC 上午 07:00:

       070000Z

      “TZID”属性参数不得应用于以 UTC 指定时间值的时间属性。

其他属性 X-WR-TIMEZONE 和 X-LIC-LOCATION 不属于该规范。

紧接着 OP 中的原始主题,我看到其他人也在 相关主题 中提到,这个问题特定于 godaddy 的日历视图。也许是他们在导入 ical 文件时,其适配器处理方式存在问题。您是否在其他日历中注意到此问题?

1 个赞

时区标识符 TZID 是该规范的一部分 RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar)

是的,我明白那部分了。同一份规范中也说明了:

“TZID”属性参数不得应用于 DATE 属性以及时间值以 UTC 指定的 DATE-TIME 或 TIME 属性。

我们的时间戳是以 UTC 指定的,因此不得应用 TZID 属性。