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).
TimeUnit
tidak 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, TimeUnit
salah jika DST terlibat.
SimpleDateFormat
lagi, karena sudah usang. Gunakan paket darijava.time
sebagai gantinya. DalamSimpleDateFormat
hal ini, gunakanDateTimeFormatter
. Dalam kasus Java 7, lihat komentar Andy Turner di bawah ini.