我正面临Java的一个奇怪问题(版本6,7,8).在这段代码中,我试图计算2个日期之间的日期差异,这段代码给出了我在03/12/2018和01/04/2018之间的日期差异,为66.958天,而不是67天,这有点令人惊讶.我还没见过这种行为.
为了证明这个理论,你可以尝试在03/11/2018之前的任何日期,这是简单的数学.请告知你们的想法.我已经尝试了与Java捆绑在一起的ChronoUnit类,它正确地计算了天数,但只是想知道这里发生了什么,如果你有任何意见.
static void dateLogic1() throws ParseException{
String matYear1 = "03/11/2018";
String matYear2 = "03/12/2018";
String stlDate = "01/04/2018";
java.util.Date mtYear1 = new SimpleDateFormat("MM/dd/yyyy").parse(matYear1);
java.util.Date mtYear2 = new SimpleDateFormat("MM/dd/yyyy").parse(matYear2);
java.util.Date stYear = new SimpleDateFormat("MM/dd/yyyy").parse(stlDate);
long time1 = mtYear1.getTime();
long time2 = mtYear2.getTime();
long time4 = stYear.getTime();
double diff1 = (double) (mtYear1.getTime()-stYear.getTime()) /( 24 * 60 * 60 * 1000);
double diff2 = (double) (mtYear2.getTime()-stYear.getTime()) /( 24 * 60 * 60 * 1000);
System.out.println("Date Diff between "+ mtYear1 +" & "+ stYear +" is " + diff1 );
System.out.println("Date Diff between "+ mtYear2 +" & "+ stYear +" is " + diff2 );
}
Run Code Online (Sandbox Code Playgroud)
它与夏令时有关.2018年3月11日凌晨2点,很多地方都损失了一个小时.如果将该小时转换为一天的一小部分(1/24),结果是67和66.958之间的差异.
编辑:Date.getTime()返回自Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数.因为你失去了一个小时的千分之一,这就是分数小时丢失的方式.
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |