time - 夏令时差距/重叠定义?什么时候给他们 "correct"?

标签 time jodatime dst

  1. 夏令时“重叠”和“间隙”的定义是什么? 我对它们的理解是模糊的,所以我想确认一下……“在”它们中的任何一个是什么意思?

  2. “更正”DST Gap 或 DST Overlap 是什么意思?什么时候需要更正,什么时候不需要更正?

上述问题与语言无关,但我的应用示例是:

  1. 何时调用 org.joda.time.LocalDateTime#correctDstTransition

    Correct date in case of DST overlap.The Date object created has exactly the same fields as this date-time, except when the time would be invalid due to a daylight savings gap. In that case, the time will be set to the earliest valid time after the gap. In the case of a daylight savings overlap, the earlier instant is selected.

最佳答案

大部分内容已在 the DST tag wiki 中进行了解释,但我会回答您的具体问题。

What is the definition of Daylight Savings Time 'Overlap' & 'Gap'?
...
What does it mean to be "within" either of them?

当夏令时开始时,本地时间会提前 - 通常提前一小时。这会在该时区的本地时间值中造成“差距”。

  • 例如,当夏令时在美国开始时,时钟从凌晨 1:59 滴答到凌晨 3:00。从凌晨 2:00 到凌晨 2:59 的任何本地时间值都将被视为“在时间间隔内”。

  • 请注意,间隙中的值不存在。它们不会出现在现实世界中,除非时钟未正确推进。在实践中,人们通常通过从另一个本地时间加上或减去耗时值来获得间隙内的值。

当夏令时结束时,本地时间将缩减与开始时相同的时间(同样,通常为 1 小时)。这会在该时区的本地时间值中产生“重叠”。

  • 例如,当美国夏令时结束时,时钟从凌晨 1:59 回到凌晨 1:00。如果没有额外的合格信息,从凌晨 1:00 到凌晨 1:59 的任何本地时间值都是不明确的

  • “在重叠范围内”意味着您有一个可能不明确的值,因为它落在这个范围内。

  • 此类值可能属于夏令时发生(按顺序首先),或者可能属于标准时间发生(顺序第二)。

What does it mean to "correct" for DST Gap or DST Overlap?

纠正差距意味着通过可能将本地时间值移动到不同的值来确保本地时间值有效。这样做有多种方案,但最常见和最明智的是将本地时间值提前间隙量。

  • 例如,如果您的本地时间是凌晨 2:30,并且您确定它发生在美国 Spring 向前过渡的那一天,那么它就会落入时隙。提前到凌晨 3:30。

  • 这种方法往往很有效,因为它模拟了人类手动推进模拟时钟的行为 - 或者更确切地说,纠正了它没有被正确推进的想法。

纠正重叠意味着确保所有本地时间都合格。通常这是通过为所有值分配时区偏移量来实现的。

  • 在值没有歧义的情况下,偏移量是确定性的。

  • 如果某个值在回退转换当天落在重叠范围内,则选择两个可能值中的第一个通常是有意义的(这将具有夏令时时间偏移)。这是因为时间向前移动。但是,有时在某些情况下使用不同的规则是有意义的,因此 YMMV。

When does a time need correcting, and when does it not need correcting?

如果您尝试将时间作为瞬时值处理,例如确定两个值之间经过的持续时间、将耗时添加到特定值,或者在转换为 UTC 时,则需要更正间隙和重叠当它们发生时。

如果您只处理用户输入和输出,始终显示用户给您的确切值(并且从不将其用于数学或时区转换),那么您不需要更正间隙和重叠。

此外,如果您使用的是仅日期值或仅时间值,那么您根本不应该应用时区信息,因此不需要更正间隙和重叠。

最后,如果您严格使用没有夏令时的协调世界时 (UTC),则无需更正间隙和重叠。

When to call org.joda.time.LocalDateTime#correctDstTransition?

你不知道。该方法是私有(private)的,并根据需要由其他 Joda 时间函数调用。

关于time - 夏令时差距/重叠定义?什么时候给他们 "correct"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058819/

相关文章:

java - joda time to Date 不一致的时区

java - 如何在没有毫秒的情况下打印 DateTime

sql - PostgreSQL:将间隔添加到不同时区的时间戳

dst - 如何正确处理Apache Airflow中的夏令时?

Python时间戳不打印-打开大文本

ruby-on-rails - Rails 得到两个日期之间的差异

bash - 努力解析(bash)时间命令

javascript - jQuery 中的表单输入类型时间清除事件

Java Mockito 何时返回对象创建

php - 为什么 PHP 日期的迭代数周会出错?