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).
TimeUnit
no 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, TimeUnit
se equivoca cuando está involucrado el horario de verano.
SimpleDateFormat
más, ya que está obsoleto. Use paquetes de en sujava.time
lugar. EnSimpleDateFormat
el caso de, usoDateTimeFormatter
. En el caso de Java 7, vea el comentario de Andy Turner a continuación.