有些事情看上去不对劲,我只是不知道该如何解决。
我想知道两天之间的区别。现在我实现了一个函数,它计算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损失了一天)
发布于 2017-03-22 10:39:19
约会很难。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……
https://stackoverflow.com/questions/42949063
复制相似问题