夏令时 Gap/Overlap 定义?什么时候给他们"correct"?

Daylight Savings Time Gap/Overlap definitions? When to "correct" for them?

  1. 夏令时的定义是什么 'Overlap' & 'Gap'? 我对他们的理解是模糊的,所以我想确认一下..."within"他们中的任何一个是什么意思?

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

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

  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?

当夏令时开始时,当地时间会提前 - 通常提前一小时。这会在该时区的本地时间值中创建 "gap"。

  • 例如,当 DST 在美国开始时,时钟从 1:59 AM 滴答到 3:00 AM。从 2:00 AM 到 2:59 AM 的任何本地时间值都将被视为 "within the gap".

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

当夏令时结束时,当地时间将缩短与开始时相同的时间(同样,通常为 1 小时)。这会在该时区的本地时间值中创建一个 "overlap"。

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

  • 成为"within the overlap"意味着你有一个可能不明确的值,因为它落在这个范围内。

  • 此类值可能属于 夏令时 事件(依次第一个),或者可能属于标准时间发生(依次)。

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

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

  • 例如,如果您的本地时间是 2:30 上午,并且您确定它发生在美国 spring-向前过渡的那一天,然后它落入间隙。提前到 3:30 上午。

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

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

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

  • 如果值落在回退转换当天的重叠范围内,通常选择 第一个 是有意义的两个可能的值(将具有 daylight 时间偏移)。这是因为时间向前移动。但是,有时在某些情况下使用不同的规则是有意义的,因此 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 时间函数调用。