DST 期间的 iCalendar 时区定义
iCalendar timezone definition for DST period
根据定义,欧洲夏令时从三月的最后一个星期日开始,到十月的最后一个星期日结束
参见:https://en.wikipedia.org/wiki/Summer_Time_in_Europe
从 thunderbird 的闪电日历生成的 iCalendar 事件使用带有 1970 年时间戳的时区定义
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
因为每年三月和十月的最后一个星期日可能不会是同一天,每年的日期应该不一样吧?
例如 2016 年:
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
...
DTSTART:20160327T020000
...
END:DAYLIGHT
BEGIN:STANDARD
...
DTSTART:20161030T030000
...
END:STANDARD
END:VTIMEZONE
是对的还是我遗漏了什么?
DTSTART
表示开始日期,但之后RRULE
用于计算所有下一次出现。
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
这意味着:
- 每年重复
- 每 3 个月
- 当月的最后一个星期日
根据定义,欧洲夏令时从三月的最后一个星期日开始,到十月的最后一个星期日结束
参见:https://en.wikipedia.org/wiki/Summer_Time_in_Europe
从 thunderbird 的闪电日历生成的 iCalendar 事件使用带有 1970 年时间戳的时区定义
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
TZNAME:CEST
DTSTART:19700329T020000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
TZNAME:CET
DTSTART:19701025T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
END:STANDARD
END:VTIMEZONE
因为每年三月和十月的最后一个星期日可能不会是同一天,每年的日期应该不一样吧?
例如 2016 年:
BEGIN:VTIMEZONE
TZID:Europe/Prague
BEGIN:DAYLIGHT
...
DTSTART:20160327T020000
...
END:DAYLIGHT
BEGIN:STANDARD
...
DTSTART:20161030T030000
...
END:STANDARD
END:VTIMEZONE
是对的还是我遗漏了什么?
DTSTART
表示开始日期,但之后RRULE
用于计算所有下一次出现。
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
这意味着:
- 每年重复
- 每 3 个月
- 当月的最后一个星期日