Java7 的日期差异(以天为单位)

Date difference in days for Java7

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

例如,

Date 1 : Mon Sep 10 08:32:58 GMT 2018

Date 2 : Tue Sep 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);

Output: Date difference: 0

如之前的评论所述,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);

Joda-Time 只计算整天,换句话说,将差异截断为整数。因此,如果您的值之间相差 19 小时多一点,则计为 0 天。如果要忽略日期的时间部分,请先转换为 LocalDate

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

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