java 計算間隔的天數


首先給出一個錯誤的實現:

// time1, time2 分別是 UTC 毫秒間隔
public static boolean getDayInterval(long time1, long time2) {
    long base = 24*3600*1000L;
    long day1 = time1/base + 1;
    long day2 = time2/base + 1;
    return (day1 - day2);
}

上面的代碼之所以錯誤,因為涉及到時區了,中國大陸的時區是 UTC + 8。

涉及到時區操作,使用 Calendar 類:

public static boolean isSameDay(long time1, long time2) {
    Calendar calendar1 = Calendar.getInstance();
    calendar1.setTimeInMillis(time1);
    
    Calendar calendar2 = Calendar.getInstance();
    calendar1.setTimeInMillis(time2);

    return calendar1.get(Calendar.DAY_OF_MONTH) == calendar2.get(Calendar.DAY_OF_MONTH);
}

上面的代碼可以判斷兩個時間,在本地時區中是不是同一天,但是怎樣計算天數間隔呢?我們需要在 UTC 時間的基礎上加上那 8 個小時,得到本地時區的毫秒數,然后再計算間隔天數,正確代碼如下:

public static long getDayInterval(long time1, long time2) {
    // 獲得當前時區
    TimeZone tz = TimeZone.getDefault();
    // UTC毫秒加上這個偏移值,得到本地時區的時間
    long delta = tz.getRawOffset();
    long base = 24*3600*1000L;
    long day1 = (time1+delta)/base + 1L;
    long day2 = (time2+delta)/base + 1L;
    System.out.println(new Date(time1));
    System.out.println(new Date(time2));
    System.out.println(day1);
    System.out.println(day2);
    return (day1-day2);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM