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)
Wynik to 28, a powinno być 29.
Czy strefa czasowa / lokalizacja mogą stanowić problem?
java.time
[zauważam, że korzystasz z Java 7], ThreeTenBp , Joda).
TimeUnit
nie udaje, że nic nie wie o DST. Jak mówi javadoc: nanosekunda jest definiowana jako jedna tysięczna mikrosekundy, mikrosekunda jako jedna tysięczna milisekundy, milisekunda jako jedna tysięczna sekundy, minuta jako sześćdziesiąt sekund, godzina jako sześćdziesiąt minut i dzień jako dwadzieścia cztery godziny . --- Ponieważ DST powoduje, że 2 dni w roku nie są dokładnie 24 godziny, TimeUnit
robi się źle, gdy DST jest zaangażowany.
SimpleDateFormat
więcej, ponieważ jest przestarzały.java.time
Zamiast tego użyj pakietów . W takimSimpleDateFormat
przypadku użyjDateTimeFormatter
. W przypadku Java 7 zobacz komentarz Andy Turner poniżej.