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 พูดว่า: นาโนวินาทีถูกกำหนดให้เป็นหนึ่งในพันของไมโครวินาที, ไมโครวินาทีเป็นหนึ่งในพันของมิลลิวินาที, มิลลิวินาทีเป็นหนึ่งพันวินาที, นาทีเป็นหกสิบวินาที, หนึ่งชั่วโมงเป็นหกสิบนาที, และหนึ่งวันต่อวัน ยี่สิบสี่ชั่วโมง --- เนื่องจาก DST ทำให้ 2 วันของปีไม่ตรงกับ 24 ชั่วโมงTimeUnit
ทำให้เกิดความผิดพลาดเมื่อเกี่ยวข้องกับ DST
SimpleDateFormat
อีกต่อไปเพราะล้าสมัยแล้ว ใช้แพ็คเกจจากjava.time
แทน ในกรณีของการใช้งานSimpleDateFormat
DateTimeFormatter
ในกรณีของ Java 7 ดูความคิดเห็นของ Andy Turner ด้านล่าง