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)
Результат - 28, тоді як він повинен бути 29.
Чи може бути проблемою часовий пояс / місцеположення?
java.time
[хоча зауважу, ви перебуваєте на Java 7], ThreeTenBp , Joda ).
TimeUnit
не претендує на те, що знає нічого про DST. Як говорить javadoc: Наносекунда визначається як одна тисячна частина мікросекунди, мікросекунда - одна тисячна частки мілісекунди, мілісекунда - одна тисячна частина секунди, хвилина шістдесят секунд, година шістдесят хвилин, а день як двадцять чотири години . --- Оскільки DST призводить до того, що 2 дні в році не становлять рівно 24 годин, TimeUnit
помиляється, коли задіяний DST.
SimpleDateFormat
, оскільки це застаріло. Використовуйтеjava.time
замість пакунків . УSimpleDateFormat
такому випадку використовуйтеDateTimeFormatter
. У випадку з Java 7 див. Коментар Енді Тернера нижче.