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).
TimeUnit
gibt 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 TimeUnit
dies falsch, wenn die Sommerzeit betroffen ist.
SimpleDateFormat
mehr verwenden, da es veraltet ist. Verwenden Siejava.time
stattdessen Pakete von . In diesemSimpleDateFormat
Fall verwendenDateTimeFormatter
. Im Fall von Java 7 siehe Andy Turners Kommentar unten.