【发布时间】:2020-01-14 00:38:23
【问题描述】:
我正在处理一些遗留代码,其中java.util.Calendar 用于与日期相关的计算(基本上是添加月份)。现在我想在代码中用java.time.LocalDate 替换java.util.Calendar,但我不想改变行为。因此,我一直在寻找一个来源,该来源可以澄清它们对于任何情况下的相同计算都会产生相同的结果,但我找不到任何结果。
特别是我想知道是否有一个日期使它们在以下之间产生不同的结果:
Calendar#add(Calendar.MONTH, months)
和
LocalDate#plusMonth(months)
我已经测试了一些极端情况(例如与闰年相关的日期),它们似乎产生了相同的结果,但我不能 100% 确定这一点。没有关于这方面的任何官方信息或它们之间的一些已知差异吗?
【问题讨论】:
-
您咨询过the documentation吗?
-
是的,但不清楚它们在日期相关计算方面是否 100% 兼容
-
明确一点:您应该永远使用
Calendar或Date。这些课程真的很糟糕——JSR 310 被采用是有充分理由的!要与 java.time 尚未更新的遗留代码互操作,您可以轻松地来回转换。查看添加到旧类的新to…/from…方法。对于Calendar,转换为GregorianCalendar,然后调用toZonedDateTime。对于java.util.Date,请致电toInstant。换个方向:GregorianCalendar.from( myZonedDateTime )和Date.from( myInstant )。
标签: java localdate date java.util.calendar