java – 为什么特定日期(03/12/2018)之间的差异不是确切的天数?
发布时间:2020-12-15 04:49:29 所属栏目:Java 来源:网络整理
导读:我正面临 Java的一个奇怪问题(版本6,7,8).在这段代码中,我试图计算两个日期之间的日期差异,这段代码给出了我在03/12/2018和01/04/2018之间的日期差异,为66.958天,而不是67天,这有点令人惊讶.我还没见过这种行为. 为了证明这个理论,你可以尝试在03/11/2018之
我正面临
Java的一个奇怪问题(版本6,7,8).在这段代码中,我试图计算两个日期之间的日期差异,这段代码给出了我在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 ); } 解决方法
它与夏令时有关. 2018年3月11日凌晨2点,很多地方都损失了一个小时.如果将该小时转换为一天的一小部分(1/24),结果是67和66.958之间的差异.
编辑:Date.getTime()返回自Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数.因为你失去了一个小时的千分之一,这就是分数小时丢失的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |