【发布时间】:2016-10-21 19:59:39
【问题描述】:
假设我有以下日期、时间和时区:2016-10-15, 1:00:00, America/Toronto。
如何创建一个ZonedDateTime 来表示指定区域中的确切日期和时间?
基本上我需要一个ZonedDateTime 对象,它代表确切时区中的确切日期和时间。
如果时间被跳过,我想将小时刻度添加到新时间。示例:
如果 00:00 被跳过到 1:00,并且我尝试获取区域中的时间 00:30,我希望结果是 1:30,而不仅仅是 1:00,这是第一次间隔。
如果将 00:00 跳到 1:45,并且我尝试获取该区域中的时间 00:20,我希望结果不是 2:05。
如果时间不明确,i。 e.,出现两次,我要早一点的映射。
【问题讨论】:
-
您可能对此感兴趣.. stackoverflow.com/questions/21945436/…
-
@Veeram 非常感谢您!正是我需要的。
-
如果该日期/时间不存在或出现两次,您希望发生什么?我可以从您答案中的代码中推断出它,但要求应该在您的 question 中。
-
@JonSkeet 并不是我没有提到它们,而是我根本没有真正意识到这个问题的存在,因为我没有考虑到 tz 的变化。只有在我了解了 3 种 InZone 方法之间的区别之后,才发现某个特定时间可能不存在于 tz 中,因为它被跳过了,或者可能出现两次。
-
对,但是一旦你意识到问题的存在,你应该把你更新的需求放在问题中。目前你说你想要一个代表时区确切日期和时间的
ZonedDateTime- 但你的 answer 没有给出。 (如果“期望的”时间是凌晨 1:30 但被跳过了,那么您将给出凌晨 2:30。)