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)
El resultado es 28, mientras que debería ser 29.
¿Podría la zona horaria / ubicación ser el problema?
java.time[aunque noto que está en Java 7], ThreeTenBp , Joda).
TimeUnitno pretende saber nada sobre el horario de verano. Como dice el javadoc: un nanosegundo se define como una milésima de microsegundo, un microsegundo como una milésima de milisegundo, un milisegundo como una milésima de segundo, un minuto como sesenta segundos, una hora como sesenta minutos y un día como veinticuatro horas . --- Dado que el horario de verano hace que 2 días del año no sean exactamente 24 horas, TimeUnitse equivoca cuando está involucrado el horario de verano.
SimpleDateFormatmás, ya que está obsoleto. Use paquetes de en sujava.timelugar. EnSimpleDateFormatel caso de, usoDateTimeFormatter. En el caso de Java 7, vea el comentario de Andy Turner a continuación.