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)
Результат 28, а должно быть 29.
Может ли быть часовой пояс / местоположение?
java.time
[хотя я отмечаю, что вы находитесь на Java 7], ThreeTenBp , Joda).
TimeUnit
не делает вид, что ничего не знает о DST. Как говорит Javadoc: наносекунду определяют как одну тысячную микросекунды, микросекунду - одну тысячную миллисекунды, миллисекунду - одну тысячную секунды, минуту - шестьдесят секунд, час - шестьдесят минут, а день - как двадцать четыре часа . --- Так как летнее время приводит к тому, что 2 дня в году не являются ровно 24 часами, TimeUnit
это неправильно, когда речь идет о летнем времени.
SimpleDateFormat
больше, потому что он устарел.java.time
Вместо этого используйте пакеты от . ВSimpleDateFormat
случае использованияDateTimeFormatter
. В случае Java 7, см. Комментарий Энди Тернера ниже.