首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同时间间隔util.date和DAYS.between(本地时间)

不同时间间隔util.date和DAYS.between(本地时间)
EN

Stack Overflow用户
提问于 2017-03-22 10:34:30
回答 1查看 78关注 0票数 1

有些事情看上去不对劲,我只是不知道该如何解决。

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

代码语言:javascript
复制
public long calculateNumberOfDays(Date from, Date to) {
    return (to.getTime() - from.getTime()) / (1000*60*60*24);
}

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

为了知道这两个函数之间有什么区别,我编写了这个小测试:

代码语言:javascript
复制
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);
}

它产生了以下产出:

代码语言:javascript
复制
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损失了一天)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-22 10:39:19

约会很难。java Date是日期和时间,所以当您将它设置为实际日期时,它意味着该日期的午夜。

现在任何一天都有夏时制(至少在这里),所以周一的午夜将是周日午夜后的23个小时。

整数四舍五入,所以4天23小时是4天。

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

代码语言:javascript
复制
double diffDays = diffMS/(1000*60*60*24);

4.0

代码语言:javascript
复制
double diffDays = diffMS/(1000.0*60*60*24);

4.958333……

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42949063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档