【问题标题】:Date difference in days for Java7Java7 的日期差异(以天为单位)
【发布时间】:2019-02-15 12:57:46
【问题描述】:

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

例如,

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

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

在上述情况下,我需要日期差为 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

【问题讨论】:

  • 如果您使用的是您引用的代码示例,您应该注意,对于您的输入,它会给出 0 天,因为时差小于一整天,并且会向下取整。
  • 在问题描述中添加示例
  • @Roy 我需要天数差异而不考虑时间。
  • @Ole - 感谢您提供信息!以下方法对我有用: int days = Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays();
  • 我建议迁移到 JSR310 库。向后移植可用于 java 6+

标签: java date java-7 jodatime date-difference


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 您使用的是 java.time 而不是 Joda-Time?一个好主意,但最好说清楚,请。
    • 是的,我在计算间隔天数时使用的是 java.time 而不是 yodatime。感谢您的建设性意见。答案更新为澄清。
    猜你喜欢
    • 2011-04-19
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    相关资源
    最近更新 更多