小编典典

建议用于Joda-Time的DateMidnight

java

javdoc的LocalDate#toDateMidnight内容如下:

从v1.5开始,由于下面详述的异常,建议您避免使用DateMidnight并使用toDateTimeAtStartOfDay()代替。

如果默认时区在午夜切换为夏时制,并且此LocalDate表示该切换日期,则此方法将引发异常。问题在于,在规定的日期没有午夜这样的时间,因此会引发异常。

午夜在某些时区中不存在的事实似乎足以避免DateMidnight完全使用(假设您的代码未使用固定的时区,而该时区不存在这种DST情况,并且永远不需要在该时区中使用其他时区)未来)。

但是,DateMidnight它不被弃用,并且javadoc中没有针对DateMidnight类本身的类似建议或警告。此外,DateMidnight构造函数愉快地接受一个即时和时区,以使午夜在给定的一天不存在,而不是抛出IllegalArgumentExceptionlike
LocalDate#toDateMidnight。结果在一天开始时的DateMidnight表现就像是DateTime带时间的。

如果在给定的一天中不存在午夜,为什么LocalDate#toDateMidnightDateMidnight构造函数不存在时抛出异常?推荐的用例是DateMidnight什么?


阅读 292

收藏
2020-09-26

共1个答案

小编典典

没有充分的理由使用DateMidnightLocalDate是更好的选择。那是因为午夜不会在某些时区每年发生一次,这完全搞乱了该类的可用性,并在应用程序中创建了错误。

固定构造函数可以避免出现最严重的问题,但是,看到DateMidnight内部毫秒值指向01:00的对象并不是一件好事。

2020-09-26