Calendar原始碼--JDK是怎麼計算時間的

flushmeteor發表於2020-09-28

背景

        平常自己寫程式碼用到時間戳去區分兩個時間是不是同一天,兩天之間的自然天數差是多少。然後就會用一些方法將當前時區的時間戳轉化成對應的yyyyMMdd格式,然後再轉成這個時間對應零時區的時間戳,這個時間戳就是從1970年1月1號之後的時間偏移量。用這個偏移量就能計算出兩個時間是不是同一天、自然天數差是多少。

        示例程式碼如下:

    /**
     * 計算第二個時間減第一個時間的天數差,單位毫秒
     * 同一天則為0, 第二個時間大,則為正;否則為負
     * 考慮到了時區
     */
    public static long daysDiff(long timeFirst, long timeNext) {
        try {
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
            long time1 = formatter.parse(formatter.format(timeFirst)).getTime();
            long time2 = formatter.parse(formatter.format(timeNext)).getTime();

            long dayFirst = time1 / milliSecondsOneDay;
            long dayNext = time2 / milliSecondsOneDay;
            return dayNext - dayFirst;
        } catch (ParseException e) {
            log.error("daysDiff calc wrong ", e);
            return Integer.MIN_VALUE;
        }
    }

 

 

 

 

 

 

相關文章