java - 不同的时间间隔 util.date 和 DAYS.between(Localtime)

标签 java time java.util.date localdate

似乎有些不对,我只是不知道该如何解决。

我想知道 2 个日期之间的天数差异。现在我实现了一个函数,它计算 util.date 对象从毫秒到天的差异

public long calculateNumberOfDays(Date from, Date to) {
    return (to.getTime() - from.getTime()) / (1000*60*60*24);
}

我的 jUnit 测试告诉我,这个函数有错误,所以我使用 LocalDate 和 ChronoUnit.DAYS.between 函数重写了它。它就像一个魅力。

想知道这两个函数之间的区别是什么,我写了这个小测试:

for(int numberDays = 1; numberDays<10; numberDays++){
        LocalDate fromLD = LocalDate.now();
        LocalDate toLD = fromLD.plusDays(numberDays);
        Date fromD = Date.valueOf(fromLD);
        Date toD = Date.valueOf(toLD);
        long diffMS = toD.getTime() - fromD.getTime();
        double diffDays = diffMS/(1000*60*60*24);
        long numDaysDate = DAYS.between(fromLD, toLD);
        System.out.println(numberDays+" = "+diffDays+"/"+numDaysDate);
}

结果如下:

1 = 1.0/1
2 = 2.0/2
3 = 3.0/3
4 = 4.0/4
5 = 4.0/5
6 = 5.0/6
7 = 6.0/7
8 = 7.0/8
9 = 8.0/9

谁能给我解释一下,这怎么可能? (1-4有效,5-9 util.date丢了一天)

最佳答案

日期很难。 java Date 是日期和时间,因此当您将其设置为实际日期时,它表示该日期的午夜。

现在任何一天(至少在这里)都会开始夏令时,因此星期一的午夜将比星期日的午夜晚 23 小时。

整数除法向下舍入,所以 4 天 23 小时是 4 天

将整数除法的结果转换为 double 为时已晚;您需要转换其中一个或两个输入:

double diffDays = diffMS/(1000*60*60*24);

4.0

double diffDays = diffMS/(1000.0*60*60*24);

4.958333...

关于java - 不同的时间间隔 util.date 和 DAYS.between(Localtime),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949063/

相关文章:

javascript - Moment.js : How to display a time value only

java - 用于传递和调用方法引用的 Lambda 语法

java - AJAX调用Java字符编码

php - 如何根据Mysql中存储的时间重新加载PHP页面?

javascript - 同时执行 JS 函数

java - 将日期从 json 解析为对象时出错

java - 为什么这没有意义?删除节点

java - Flume的一些问题

java - 检查当前日期日期是否在当前月份内

java - 为什么util.Date转发日期而不是减去日期?