首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 計算兩日期相差天數的工具方法實現

     編輯:Java 綜合教學

Java 計算兩日期相差天數的工具方法實現

提供一個基於 java.util.Calendar 的工具方法,精確計算兩個 Date 物件之間的天數差異,忽略時間部分(時、分、秒、毫秒),適用於業務邏輯中需比較日期間隔的場景。

核心程式碼

/**
 * 計算兩個日期之間的天數差
 * @param now 起始日期
 * @param returnDate 結束日期
 * @return 相差天數 (正數表示 now 在 returnDate 之後)
 */
private int daysBetween(Date now, Date returnDate) {
    Calendar cNow = Calendar.getInstance();
    Calendar cReturnDate = Calendar.getInstance();
    cNow.setTime(now);
    cReturnDate.setTime(returnDate);
    
    // 將時間重置為當天 00:00:00,忽略時間影響
    setTimeToMidnight(cNow);
    setTimeToMidnight(cReturnDate);
    
    long todayMs = cNow.getTimeInMillis();
    long returnMs = cReturnDate.getTimeInMillis();
    long intervalMs = todayMs - returnMs;
    
    return millisecondsToDays(intervalMs);
}

/**
 * 毫秒數轉換為天數
 */
private int millisecondsToDays(long intervalMs) {
    return (int) (intervalMs / (1000 * 60 * 60 * 24)); // 1000*86400
}

/**
 * 將 Calendar 時間設為當天午夜 (00:00:00)
 */
private void setTimeToMidnight(Calendar calendar) {
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0); // 建議補上毫秒
}

關鍵點解析

  • 時間歸零: 必須將兩個日期的時間部分統一設為 00:00:00,否則同一天的不同時刻會導致毫秒差異,進而影響天數計算。
  • 毫秒轉天數: 1 天 = 24 × 60 × 60 × 1000 = 86,400,000 毫秒。
  • 正負值含義: 回傳值為正表示第一個日期晚於第二個日期。

現代替代方案 (Java 8+)

若專案使用 Java 8 或更新版本,強烈建議使用 java.time 套件,程式碼更簡潔且線程安全:

import java.time.LocalDate;
import java.temporal.ChronoUnit;

public long daysBetweenModern(LocalDate start, LocalDate end) {
    return ChronoUnit.DAYS.between(start, end);
}

注意: 此範例使用舊版 Date/Calendar API,僅供維護舊專案參考。新專案請優先使用 java.time.LocalDate。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved