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)
O resultado é 28, enquanto deve ser 29.
O fuso horário / local pode ser o problema?
java.time
[embora eu note que você esteja no Java 7], ThreeTenBp , Joda).
TimeUnit
não pretende saber nada sobre horário de verão. Como diz o javadoc: Um nanossegundo é definido como um milésimo de microssegundo, um microssegundo como um milésimo de um milissegundo, um milissegundo como um milésimo de segundo, um minuto como sessenta segundos, uma hora como sessenta segundos e um dia como vinte e quatro horas . --- Como o horário de verão faz com que dois dias do ano não sejam exatamente 24 horas, TimeUnit
ele erra quando o horário de verão está envolvido.
SimpleDateFormat
mais, pois é obsoleto. Use pacotes dejava.time
vez. NoSimpleDateFormat
caso, useDateTimeFormatter
. No caso do Java 7, veja o comentário de Andy Turner abaixo.