【问题标题】:Java 8, why not a ZonedTime class?Java 8,为什么不是 ZonedTime 类?
【发布时间】:2014-12-19 17:05:28
【问题描述】:

我发现 Java 8 没有与 ZonedDateTime 等效的功能,但只能与 TimeZonedTime 类或类似的类)一起使用。 我知道他们包含了 OffsetTime 类,但它只存储偏移量。

将时区与日期和时间一起存储,而不仅仅是存储偏移量,有助于更轻松地处理夏令时。

我不是要你给我替代方案,我知道有很多方法;我只是想知道为什么不包括这样的课程,这是设计问题吗?还是他们只是发现它是多余的?

【问题讨论】:

  • 你的问题毫无意义。您说“Java 8 没有与 ZonedDateTime 等效的”,同时包含指向 Java 8 文档的链接,该文档定义了 Java 8 中捆绑的 ZonedDateTime 类。
  • 我接受我的问题可能没有很好地表述,但我认为它仍然有效。我认为大多数人都明白了这一点。
  • 在第三次阅读时,您的任务似乎是定义一个只有时间值的类,没有任何日期,但与 UTC 甚至时区有偏移。正如accepted answer by Meno Hochschild 正确指出的那样,从直觉上看,这似乎是一个好主意,但存在问题。由于政治和边界、夏令时和其他异常情况,时区和偏移被重新定义。没有日期,时区就没有具体含义。

标签: date datetime time timezone java-8


【解决方案1】:

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

建议的类型不包含日期。但是如果没有日期,就无法评估实际时区偏移量以将本地时间映射到任何合理的全球时间。考虑到任何夏令时方面,您还必须有日期和时间。

【讨论】:

  • 我之前确实想过这个,但我认为它在某些情况下会很有用。无论如何,感谢您的回复。例如,我会用它来存储学校时间表的时间;我不会执行重要日期的转换,我只想知道课程的开始和结束时间,以便向世界其他地区的用户展示。
  • @JuanLhc 为了向世界其他地方的人们显示课程的开始和结束时间,您仍然需要知道日期。否则将无法确定偏移量的差异,因为您无法知道使用夏令时还是冬令时偏移。
  • 你完全正确。感谢您的回复!
  • -1 我觉得这个答案没有说服力。简单地说您不能将它自己映射到正确的日期并不意味着这种类型没有用例。我支持这样的应用程序,其中事件必须每天在给定时间在某个位置发生(即伦敦每天下午 1 点)。 5 PM NY 是金融系统中一个被大量使用的概念。 ZonedTime 是此问题的逻辑类型 - 可以在评估函数时提供日期。
  • @Meno 当然,有很多方法可以解决这个问题,但这并不会使这种类型成为“严重错误”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2015-01-05
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
相关资源
最近更新 更多