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

时间:2017-03-22 10:34:31

标签: java time java.util.date localdate

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

我想知道两个日期之间的天数差异。现在我实现了一个函数,它计算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失去了一天)

1 个答案:

答案 0 :(得分:3)

日期很难。 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