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)
Hasilnya adalah 28, sedangkan seharusnya 29.
Mungkinkah zona waktu / lokasi menjadi masalah?
java.time[meskipun saya perhatikan Anda berada di Java 7], ThreeTenBp , Joda).
TimeUnittidak berpura-pura tahu tentang DST. Seperti yang dikatakan javadoc: Satu nanodetik didefinisikan sebagai seperseribu mikrodetik, mikrodetik sebagai seperseribu milidetik, satu milidetik sebagai seperseribu detik, satu menit enam puluh detik, satu jam enam puluh menit, dan satu hari sebagai dua puluh empat jam . --- Karena DST menyebabkan 2 hari dalam setahun menjadi tidak persis 24 jam, TimeUnitsalah jika DST terlibat.
SimpleDateFormatlagi, karena sudah usang. Gunakan paket darijava.timesebagai gantinya. DalamSimpleDateFormathal ini, gunakanDateTimeFormatter. Dalam kasus Java 7, lihat komentar Andy Turner di bawah ini.