一文读懂全球化系统中的日期时间处理问题( 四 )


5.2 夏令时某些国家在夏天,会把时间调快一小时(提前一小时) 。这表现为,同一个地区,在冬天和夏天用不同的绝对时区 。
这样做,是因为夏天白天很长,调整后会在白天的更早的时段上班,从而下班后有更长的天亮的时间 。注意,并不是把 10 点上班调整到 9 点上班,而是全社会重新定义了 10 点提前了一小时 。
一个具体的例子,在美国:
在 2021 年 3 月 14 日凌晨 1:59:59 后,下一秒就是凌晨 3:00:00 。因此,美国的 2021 年 3 月 14 日凌晨 2:10:00 这个时间实际上不存在 。为了兼容,根据 RFC5545,如果日程约在了这个不存在的时间,会认为是 3:10:00 。
在 2021 年 11 月 7 日凌晨 1:59:59 后,下一秒是凌晨 1:00:00 。因此,美国的 2021 年 11 月 7 日凌晨 1:10:00 这个时间实际上会出现两次 。为了避免歧义,根据 RFC5545,看到这个时间时,会认为是靠前的时间点 。因此,除非用别国的时区来约日程,否则,美国老板是不可能约你在重叠的第二个小时内开会的 。
阅读更多及参考文献

  • Wikipedia: ISO8601 - 用字符串表达各种时间对象的标准
https://en.wikipedia.org/wiki/ISO_8601
  • RFC3339 - 互联网上关于时间和日期实现的通用建议
https://www.rfc-editor.org/rfc/rfc3339
  • RFC5545 - iCalendar 互联网日历应用的规范
https://datatracker.ietf.org/doc/html/rfc5545
  • Stackoverflow: Daylight saving time and time zone best practices [closed] - 技术实现建议
https://stackoverflow.com/questions/2532729/daylight-saving-time-and-time-zone-best-practices
  • Stackoverflow: How to store repeating dates keeping in mind daylight saving time - 技术实现建议
https://medium.com/@vivekmadurai/how-to-deal-with-date-and-time-across-time-zones-39b1bd747f35
  • Medium: How to Deal with Date and Time across Time Zones - 技术实现建议
https://medium.com/@vivekmadurai/how-to-deal-with-date-and-time-across-time-zones-39b1bd747f35
  • Microsoft365: Behavior and format options of the Date and Time field - 微软的时间和日期字段的文档
https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/customize/behavior-format-date-time-field?view=op-9-1
  • Time Change 2021 in the United States - 美国 2021 年夏令时的调整方式
https://www.timeanddate.com/time/change/usa?year=2021




推荐阅读