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)
Il risultato è 28, mentre dovrebbe essere 29.
Il fuso orario / la posizione potrebbe essere il problema?
java.time
[anche se noto che sei su Java 7], ThreeTenBp , Joda).
TimeUnit
non pretende di sapere nulla dell'ora legale. Come dice il javadoc: un nanosecondo è definito come un millesimo di microsecondo, un microsecondo come un millesimo di millisecondo, un millisecondo come un millesimo di secondo, un minuto come sessanta secondi, un'ora come sessanta secondi e un giorno come ventiquattro ore . --- Poiché l'ora legale fa sì che 2 giorni all'anno non siano esattamente 24 ore, TimeUnit
si sbaglia nel caso dell'ora legale.
SimpleDateFormat
più, poiché è obsoleto. Usajava.time
invece i pacchetti da . NelSimpleDateFormat
caso, utilizzareDateTimeFormatter
. Nel caso di Java 7, vedere il commento di Andy Turner di seguito.