加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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以来的毫秒数.因为你失去了一个小时的千分之一,这就是分数小时丢失的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读