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 时区数据库内置此信息,并(希望)保持最新。系统或语言通常具有获取给定日期和时间的偏移量的功能。例如:
- 在phphttps://www.php.net/manual/en/datetime.getoffset.php. or one can get all the transitions to output to a 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 转换定义,在任何重复规则上使用 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
我正在寻找一个深刻的解释,说明 iCalendar 描述中的 TZOFFSETFROM 和 TZOFFSETTO 之间到底有什么区别,以及如何计算它。
虽然此处进行了描述:https://www.rfc-editor.org/rfc/rfc5545#section-3.6.5 [第 65 页] 我无法理解其含义,尤其是如何计算它。 我有所有时区及其相关 UTC_offset_StandardTime 和 UTC_offset_DaylightSavingTime 的列表,但没有“...开始...”-时间。
虽然有某种答案我找不到证明这一点的资源。
我错过了什么?
回复:“如何计算时区偏移量”:
它不是 'calculated',而是查找 - 大多数系统都使用 Olson 时区数据库内置此信息,并(希望)保持最新。系统或语言通常具有获取给定日期和时间的偏移量的功能。例如:
- 在phphttps://www.php.net/manual/en/datetime.getoffset.php. or one can get all the transitions to output to a 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 转换定义,在任何重复规则上使用 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