TimeUnit.DAYS.convert(
Math.abs(
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("30-03-2020 00:00:00").getTime() -
new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").parse("1-03-2020 00:00:00").getTime()
),
TimeUnit.MILLISECONDS)
结果为28,但应该是29。
时区/位置是否可能是问题所在?
SimpleDateFormat
,而应该使用java.time
包中的工具。对于SimpleDateFormat
,请使用DateTimeFormatter
代替。如果使用Java 7,请参考下面Andy Turner的评论。 - MC Emperorjava.time
[尽管我注意到您使用的是 Java 7],ThreeTenBp,Joda)。 - Andy TurnerTimeUnit
不涉及夏令时的问题。正如 javadoc 所说:“纳秒被定义为微秒的千分之一,微秒被定义为毫秒的千分之一,毫秒被定义为秒的千分之一,分钟被定义为六十秒,小时被定义为六十分钟, 一天被定义为二十四小时。”因为夏令时导致一年中有2天不是精确的24小时,所以在涉及夏令时时,TimeUnit
的计算会出现误差。 - Andreas