Java7的日期差异

问题描述 投票:1回答:2

我的日期格式为:EEE, dd MMM yyyy HH:mm:ss Z

例如,

日期1:周一9月10日08:32:58 GMT 2018

日期2:星期二9月11日03:56:10 GMT 2018

我在上面的情况下需要日期差异为1,但如果我使用joda日期时间或手动将日期转换为毫秒,我的值为0。

供参考:http://www.mkyong.com/java/how-to-calculate-date-time-difference-in-java/

任何线索都会有所帮助。示例:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
DateTime start = new DateTime(date1 );
DateTime end = new DateTime(date2);
int days = Days.daysBetween(start, end).getDays();
System.out.println("Date difference: " + days);

输出:日期差异:0

java date java-7 jodatime date-difference
2个回答
2
投票

Joda-Time仅计算整天,换句话说,将差异截断为整数。因此,您的值之间的距离超过19小时,则计为0天。如果您想忽略日期的时间部分,请先转换为LocalDate

    int days = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();

(感谢您自己在评论中提供具体代码。既然您说它有效,我认为它应该是一个答案。)


2
投票

正如之前评论中所提到的,Joda-Time计算整天并且向下舍入。因此,您需要在比较时跳过时间。这样的东西可以使用Java.time比较日期:

Date date1 = new Date("Mon Sep 10 08:32:58 GMT 2018");
Date date2 = new Date("Tue Sep 11 03:56:10 GMT 2018");
LocalDate start = date1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
LocalDate end = date2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
long between = ChronoUnit.DAYS.between(start, end);

System.out.println("Date difference: " + between);
© www.soinside.com 2019 - 2024. All rights reserved.