不同的时间间隔 util.date 和 DAYS.between(本地时间)
Different time interval util.date and DAYS.between(Localtime)
似乎有些不对劲,我只是不知道该如何解决。
我想知道两个日期之间相差多少天。现在我实现了一个函数,它计算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-9util.date浪费了一天)
约会很难。 java Date
是日期和时间,因此当您将其设置为实际日期时,它表示该日期的午夜。
现在任何一天(至少在这里)都会开始夏令时,因此周一午夜将比周日午夜晚 23 小时。
整数除法四舍五入,所以4天23小时就是4天
将整数除法的结果转换为双精度为时已晚;您需要投射其中一个或两个输入:
double diffDays = diffMS/(1000*60*60*24);
4.0
double diffDays = diffMS/(1000.0*60*60*24);
4.958333...
似乎有些不对劲,我只是不知道该如何解决。
我想知道两个日期之间相差多少天。现在我实现了一个函数,它计算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-9util.date浪费了一天)
约会很难。 java Date
是日期和时间,因此当您将其设置为实际日期时,它表示该日期的午夜。
现在任何一天(至少在这里)都会开始夏令时,因此周一午夜将比周日午夜晚 23 小时。
整数除法四舍五入,所以4天23小时就是4天
将整数除法的结果转换为双精度为时已晚;您需要投射其中一个或两个输入:
double diffDays = diffMS/(1000*60*60*24);
4.0
double diffDays = diffMS/(1000.0*60*60*24);
4.958333...