时间DateMidnight

LocalDate#toDateMidnight内容如下:

从v1.5开始,建议您避免使用DateMidnight,并使用toDateTimeAtStartOfDay()代替,因为下面详述了这个例外。

如果默认时区在午夜切换为夏令时并且此LocalDate表示切换日期,则此方法将引发异常。 问题在于,没有必要的日期是午夜,因此抛出异常。

事实上,某些时区中不存在午夜似乎足以避免完全使用DateMidnight (假设您的代码未使用已知不具有此DST情况的固定时区,并且将永远不需要使用不同的时区未来)。

但是, DateMidnight不被弃用,并且在DateMidnight类本身的javadoc中没有类似的建议或警告。 此外, DateMidnight构造函数愉快地接受即时和时区,使得在给定日期不存在午夜,而不是像LocalDate#toDateMidnight那样抛出IllegalArgumentException 。 由此产生的DateMidnightDateTime开始时的行为就像是一个DateTime

当某一天的午夜不存在时,为什么LocalDate#toDateMidnightDateMidnight构造函数不引发时抛出异常? 如果有的话, DateMidnight的推荐用例是什么?


没有很好的理由使用DateMidnightLocalDate是更好的选择。 那是因为午夜在某些时区不会发生一次,彻底搞乱了课程的可用性,并且在应用程序中造成了错误。

修正构造函数以避免最糟糕的问题,但是看到内部毫秒值指向01:00的DateMidnight对象并不是太好。


建议使用新的DateTime()。withTimeAtStartOfDay()。


或者直接使用LocalDate方法toDateTimeAtStartOfDay直接绕过DateTime对象的创建(关于上面的答案)。

new LocalDate().toDateTimeAtStartOfDay( myDateTimeZone )
链接地址: http://www.djcxy.com/p/18523.html

上一篇: Time's DateMidnight

下一篇: Purpose of Joda Time LocalDate(Object instant, DateTimeZone zone) constructor