夏令时“重叠”和“间隔”的定义是什么? 我对它们的理解有些模糊,所以我想确认一下......“在”它们中的任何一个是什么意思?
“更正” DST Gap 或 DST Overlap 是什么意思? 时间什么时候需要修正,什么时候不需要修正?
上述问题与语言无关,但我的应用示例是:
在 DST 重叠的情况下更正日期。创建的 Date 对象具有与此日期时间完全相同的字段,除非时间因夏令时间隔而无效。在这种情况下,时间将设置为间隔后最早的有效时间。在夏令时重叠的情况下,选择较早的时刻。
大部分内容已在DST 标签 wiki中进行了解释,但我将回答您的具体问题。
夏令时“重叠”和“间隔”的定义是什么?
......
“在”他们中的任何一个是什么意思?
当夏令时开始时,当地时间提前 - 通常提前一小时。这会在该时区的本地时间值中产生“差距”。
例如,当 DST 在美国开始时,时钟从 1:59 AM 到 3:00 AM 计时。从凌晨 2:00 到凌晨 2:59 的任何本地时间值都将被视为“在间隙内”。
请注意,间隙中的值不存在。它们不会出现在现实世界中,除非时钟没有正确提前。在实践中,人们通常通过从另一个本地时间加上或减去经过时间值来获得间隙内的值。
当夏令时结束时,本地时间将按照开始时添加的相同数量进行回缩(同样,通常为 1 小时)。这会在该时区的本地时间值中创建“重叠”。
例如,当 DST 在美国结束时,时钟会从 1:59 AM 回到 1:00 AM。如果没有额外的合格信息,从凌晨 1:00 到凌晨 1:59 的任何本地时间值都是不明确的。
“在重叠范围内”意味着您有一个可能不明确的值,因为它落在此范围内。
这些值可能属于夏令时出现(按顺序首先出现),或可能属于标准时间出现(按顺序出现在第二个)。
“更正” DST Gap 或 DST Overlap 是什么意思?
校正间隙意味着通过可能将本地时间值移动到不同的值来确保本地时间值是有效的。有多种方案用于这样做,但最常见和最明智的是将本地时间值提前间隙量。
例如,如果您的当地时间是凌晨 2:30,并且您确定它发生在美国的春季向前过渡的那一天,那么它就会落入差距。提前到凌晨 3:30。
这种方法往往效果很好,因为模拟了人类手动推进模拟时钟的行为 - 或者更确切地说,纠正它没有正确推进的想法。
纠正重叠意味着确保所有本地时间都很好。通常这是通过为所有值分配时区偏移量来实现的。
在值不明确的情况下,偏移量是确定性的。
如果值在回退转换当天落在重叠范围内,通常选择两个可能值中的第一个值(将具有夏令时偏移)通常是有意义的。这是因为时间在向前移动。但是,有时在某些情况下使用不同的规则是有意义的,因此 YMMV。
时间什么时候需要修正,什么时候不需要修正?
如果您尝试将时间用作瞬时值,例如确定两个值之间的经过持续时间、将经过时间添加到特定值或转换为 UTC 时,则需要在出现间隙和重叠时进行校正.
如果您只处理用户输入和输出,并始终显示用户给您的确切值(并且从不将其用于数学或时区转换),那么您不需要纠正间隙和重叠。
此外,如果您正在使用仅日期值或仅时间值,那么您根本不应该应用时区信息,因此不需要校正间隙和重叠。
最后,如果您严格使用没有夏令时的协调世界时 (UTC),那么您不需要纠正间隙和重叠。
什么时候打电话
org.joda.time.LocalDateTime#correctDstTransition?
你没有。该方法是private,并根据需要由其他 Joda 时间函数调用。