TZOFFSETFROM和TZOFFSETTO的确切含义是什么以及如何计算/使用它?



我正在寻找一个深刻的解释,到底TZOFFSETFROM和TZOFFSETTO在iCalendar描述之间的区别是什么,以及如何计算它。

虽然这里有描述:https://www.rfc-editor.org/rfc/rfc5545#section-3.6.5[第65页]我无法理解它的含义,特别是如何计算它。我有一个所有时区及其相关的UTC_offset_StandardTime和UTC_offset_DaylightSavingTime的列表,但是没有" onset " time。

虽然有一个答案https://stackoverflow.com/a/3872214我找不到一个资源证明这是正确的。

我错过了什么?

Re: "如何计算时区偏移";

它不是'计算',而是查找-大多数系统使用Olson时区数据库内置了此信息,并保持(希望)最新。系统或语言通常有一个函数来获取给定日期和时间的偏移量。如:

  • 在php https://www.php.net/manual/en/datetime.getoffset.php。或者可以将所有转换输出到VTIMEZONE https://www.php.net/manual/en/datetimezone.gettransitions.php
  • 总评https://en.wikipedia.org/wiki/Time_zone#Computer_systems

大多数系统都维护这样的数据库。通常有一个反复出现的规则,总是如此,但是国家和地区可能会改变夏令时的日期。参见https://en.wikipedia.org/wiki/Daylight_saving_time_in_Australia#Western_Australia和奥运会的变化。这将意味着为这些区域提供一组额外的VTIMEZONE DST转换定义,在任何重复出现的规则上使用dtstart和UNTIL来指示它们在哪些年份适用或不适用。

现在,.ics规范要求我们必须包括这些时区转换-在文件中的VTIMEZONE定义中的夏令时更改。

这就引出了你的另一个问题:

RE:什么是TZOFFSETFROM和TZOFFSETTO?

它们是由RRULE生成的每个转换日期(或者只是一个日期,如果不是重复的,如果是一次性的),相对于UTC或GMT:

  • FROM
  • 的偏移

以3月14日的纽约2021夏令时间为例。时区偏移量为-5。在2021年3月14日凌晨2点之后,时区偏移量将为-4。参见https://www.timeanddate.com/time/zone/usa/new-york-state。

那么如果我们看一下google日历的输出,我们看到在三月的第二个星期日凌晨2点,夏令时开始,NY变为

  • -05年,
  • -04年。

那么当他们在11月的第一个星期日恢复到标准时间时,NY变为

  • -04和
  • 的偏移量

注意(FROM和TO偏移量)都是必需的,因为变化并不总是一个小时。有时变化可能需要30分钟。请参阅https://www.timeanddate.com/time/time-zones-interesting.html并在底部附近向下滚动。你会看到豪勋爵岛(Lord Howe Island)发生了半小时的变化,而朝鲜在2015年和委内瑞拉在2016年发生了"历史性的半小时偏移"。

谷歌日历纽约示例:

BEGIN:VTIMEZONE
TZID:America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE

最新更新