javdoc的LocalDate#toDateMidnight内容如下:
LocalDate#toDateMidnight
从v1.5开始,由于下面详述的异常,建议您避免使用DateMidnight并使用toDateTimeAtStartOfDay()代替。 如果默认时区在午夜切换为夏时制,并且此LocalDate表示该切换日期,则此方法将引发异常。问题在于,在规定的日期没有午夜这样的时间,因此会引发异常。
从v1.5开始,由于下面详述的异常,建议您避免使用DateMidnight并使用toDateTimeAtStartOfDay()代替。
如果默认时区在午夜切换为夏时制,并且此LocalDate表示该切换日期,则此方法将引发异常。问题在于,在规定的日期没有午夜这样的时间,因此会引发异常。
午夜在某些时区中不存在的事实似乎足以避免DateMidnight完全使用(假设您的代码未使用固定的时区,而该时区不存在这种DST情况,并且永远不需要在该时区中使用其他时区)未来)。
DateMidnight
但是,DateMidnight它不被弃用,并且javadoc中没有针对DateMidnight类本身的类似建议或警告。此外,DateMidnight构造函数愉快地接受一个即时和时区,以使午夜在给定的一天不存在,而不是抛出IllegalArgumentExceptionlike LocalDate#toDateMidnight。结果在一天开始时的DateMidnight表现就像是DateTime带时间的。
IllegalArgumentException
DateTime
如果在给定的一天中不存在午夜,为什么LocalDate#toDateMidnight在DateMidnight构造函数不存在时抛出异常?推荐的用例是DateMidnight什么?
没有充分的理由使用DateMidnight。LocalDate是更好的选择。那是因为午夜不会在某些时区每年发生一次,这完全搞乱了该类的可用性,并在应用程序中创建了错误。
LocalDate
固定构造函数可以避免出现最严重的问题,但是,看到DateMidnight内部毫秒值指向01:00的对象并不是一件好事。