Java 8,为什么没有ZonedTime类?

17
我发现Java 8没有与ZonedDateTime相当的东西,但只能使用Time(一个ZonedTime类或类似的东西)进行工作。我知道他们包括了OffsetTime类,但它仅存储偏移量。
将时区与日期和时间一起存储,而不仅仅是存储偏移量,有助于更轻松地处理夏令时。
我并不要求您为我提供替代方案,我知道有许多方法; 我只是想知道为什么没有包含这样的类,这是设计问题吗? 还是他们只是发现它是多余的?

你的问题毫无意义。你说“Java 8没有与ZonedDateTime等价的东西”,同时包含了Java 8文档中定义的ZonedDateTime类的链接。 - Basil Bourque
2
我承认我的问题可能没有表达清楚,但我认为它仍然是有效的。我认为大多数人都理解了重点。 - Juan Lhc
在第三次阅读后,似乎您的问题是要定义一个仅包含时间,没有日期但具有与UTC或时区的偏移量的类。就像Meno Hochschild所接受的答案正确指出的那样,这可能在直觉上看起来是个好主意,但会导致问题。时区和偏移量因政治和边界、夏令时以及其他异常而被重新定义。没有日期,时区没有特定的含义。 - Basil Bourque
1个回答

17

介绍一个由LocalTime和时区(而不是简单的偏移量)组成的ZonedTime类将是一个严重的错误。

建议的类型不包含日期。但是如果没有日期,则无法计算实际的时区偏移量,以将本地时间映射到任何明智的全球时间。为了考虑任何夏令时方面,您必须同时拥有日期和时间。


2
我之前就考虑过这个问题,但我认为在某些情况下它会很有用。不管怎样,感谢您的回复。例如,我会使用它来存储学校课程表的时间;我不会对日期重要的转换进行操作,我只想知道课程开始和结束的时间,以便将其显示给其他地区的用户。 - Juan Lhc
6
我觉得这个回答不够令人信服。仅仅说无法将其映射到正确的日期,并不意味着这种类型没有用途。我支持一个应用程序,在该应用程序中,事件必须在给定时间和位置每天发生(即每天下午1点伦敦时间)。纽约时间下午5点是金融系统中广泛使用的概念。对于这个问题,ZonedTime是一个合理的类型——日期可以在函数评估时提供。 - firtydank
2
@Meno 当然,有很多方法可以解决这个问题,但这并不意味着这种类型是一个“严重的错误”。 - firtydank
1
@firtydank 我同意 @Meno 的观点。大多数人认为日常重复任务是在时区内的,而不考虑夏令时。JuanLhc 的课程开始时间就是一个很好的例子。为了获取任何给定日期的精确时间,它应该有一个 toZonedDateTime(LocalDate date) 方法。我创建了许多想要在同一时间(例如晚上8点)每天运行的进程,我不应该创建自己的类来组合时间和时区。一个完整的“时间”库(比如 java.time)应该包括这个功能。 - John Fowler
1
@firtydank 糟糕!我把名字搞混了。我的评论和推理与你一致,与Meno不一致。我也认为称它为“重大错误”很奇怪。应该有一个ZonedTime类。我不认为我现在可以修复我的评论,所以...对不起! - John Fowler
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接