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)
Das Ergebnis ist 28, während es 29 sein sollte.
Könnte die Zeitzone / der Ort das Problem sein?
java.time[obwohl ich feststelle, dass Sie Java 7 verwenden], ThreeTenBp , Joda).
TimeUnitgibt nicht vor, etwas über die Sommerzeit zu wissen. Wie der Javadoc sagt: Eine Nanosekunde ist definiert als eine Tausendstel einer Mikrosekunde, eine Mikrosekunde als eine Tausendstel Millisekunde, eine Millisekunde als eine Tausendstelsekunde, eine Minute als sechzig Sekunden, eine Stunde als sechzig Minuten und ein Tag als vierundzwanzig Stunden . --- Da die Sommerzeit dazu führt, dass 2 Tage im Jahr nicht genau 24 Stunden sind, ist TimeUnitdies falsch, wenn die Sommerzeit betroffen ist.
SimpleDateFormatmehr verwenden, da es veraltet ist. Verwenden Siejava.timestattdessen Pakete von . In diesemSimpleDateFormatFall verwendenDateTimeFormatter. Im Fall von Java 7 siehe Andy Turners Kommentar unten.