TZOFFSETFROM 和 TZOFFSETTO 的确切含义是什么以及如何 calculate/use 它?

What is the exact meaning of TZOFFSETFROM and TZOFFSETTO and how to calculate/use it?

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

虽然此处进行了描述:https://www.rfc-editor.org/rfc/rfc5545#section-3.6.5 [第 65 页] 我无法理解其含义,尤其是如何计算它。 我有所有时区及其相关 UTC_offset_StandardTime 和 UTC_offset_DaylightSavingTime 的列表,但没有“...开始...”-时间。

虽然有某种答案我找不到证明这一点的资源。

我错过了什么?

回复:“如何计算时区偏移量”:

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

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

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

这引出了您的另一个问题:

RE: 什么是 TZOFFSETFROM 和 TZOFFSETTO?

它们实际上是 RRULE 生成的每个转换日期(如果不是一次性的,则只是一个日期),相对于 UTC 或 GMT:

  • OFFSET FROM 夏令时变化即将到来并且
  • OFFSET TO 夏令时变化

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

因此,如果我们查看 google 日历输出,我们会看到在 3 月的第二个星期日凌晨 2 点,夏令时开始,纽约开始

  • -05 和
  • TO-04.

然后当他们在 11 月的第一个星期日恢复到标准时间时,纽约将

  • FROM -04 和
  • 的偏移量
  • TO -05 的偏移量。

请注意,两者(FROM 和 TO 偏移量)都是必需的,因为更改并不总是一个小时。有时变化可能是 30 分钟。请参阅 https://www.timeanddate.com/time/time-zones-interesting.html 并在底部附近向下滚动。您会看到豪勋爵岛有 1/2 小时的变化,并进一步下降 'Historic half hour offsets' 朝鲜在 2015 年和委内瑞拉在 2016 年所做的事情。

Google 纽约日历示例:

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