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)
Kết quả là 28, trong khi nó phải là 29.
Múi giờ / địa điểm có thể là vấn đề?
java.time
[mặc dù tôi lưu ý rằng bạn đang ở trên Java 7], ThreeTenBp , Joda).
TimeUnit
không giả vờ biết bất cứ điều gì về DST. Như javadoc nói: Một nano giây được định nghĩa là một phần nghìn của một phần triệu giây, một phần triệu giây là một phần nghìn của một phần nghìn giây, một phần nghìn giây là một phần nghìn giây, một phút là sáu mươi giây, một giờ là sáu mươi phút và một ngày là hai mươi bốn giờ . --- Vì DST khiến 2 ngày trong năm không chính xác là 24 giờ, TimeUnit
nên đã sai khi DST tham gia.
SimpleDateFormat
nữa, vì nó đã lỗi thời. Sử dụng các gói từjava.time
thay thế. TrongSimpleDateFormat
trường hợp, sử dụngDateTimeFormatter
. Trong trường hợp Java 7, hãy xem bình luận của Andy Turner bên dưới.