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)
Le résultat est 28, alors qu'il devrait être 29.
Le fuseau horaire / l'emplacement pourrait-il être le problème?
java.time
[bien que je note que vous êtes sur Java 7], ThreeTenBp , Joda).
TimeUnit
ne prétend rien savoir de l'heure d'été. Comme le dit le javadoc: Une nanoseconde est définie comme un millième de microseconde, une microseconde comme un millième de milliseconde, une milliseconde comme un millième de seconde, une minute comme soixante secondes, une heure comme soixante minutes et un jour comme vingt-quatre heures . --- Étant donné que l'heure d'été fait que 2 jours de l'année ne sont pas exactement 24 heures, TimeUnit
il se trompe lorsque l'heure d'été est impliquée.
SimpleDateFormat
plus longtemps, car il est obsolète. Utilisezjava.time
plutôt des packages de . DansSimpleDateFormat
le cas, utilisezDateTimeFormatter
. Dans le cas de Java 7, voir le commentaire d'Andy Turner ci-dessous.