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

Java 計算兩個日期時間差:原生 SDK 與 Joda-Time 兩種方案

     編輯:Java 相關知識

核心思路

將 Date 轉換為毫秒時間戳,計算差值後換算為天、時、分、秒。換算規則:

  • 1 秒 = 1,000 毫秒
  • 1 分鐘 = 60 秒
  • 1 小時 = 60 分鐘
  • 1 天 = 24 小時

方案一:原生 Java SDK(JDK 1.7 之前)

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDifferentExample {
    public static void main(String[] args) {
        String dateStart = "2013-02-19 09:29:58";
        String dateStop  = "2013-02-20 11:31:48";

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date d1 = format.parse(dateStart);
            Date d2 = format.parse(dateStop);

            long diff = d2.getTime() - d1.getTime(); // 毫秒差

            long diffDays    = diff / (24 * 60 * 60 * 1000);
            long diffHours   = diff / (60 * 60 * 1000) % 24;
            long diffMinutes = diff / (60 * 1000) % 60;
            long diffSeconds = diff / 1000 % 60;

            System.out.printf("兩個時間相差:%d 天, %d 小時, %d 分鐘, %d 秒.%n",
                    diffDays, diffHours, diffMinutes, diffSeconds);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

輸出:

兩個時間相差:1 天, 2 小時, 1 分鐘, 50 秒.

方案二:Joda-Time 庫(推薦,JDK 8 前最佳選擇)

Joda-Time 提供豐富的日期時間類型與直觀 API,線程安全、處理時區更可靠。

import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.Hours;
import org.joda.time.Minutes;
import org.joda.time.Seconds;
import java.text.SimpleDateFormat;
import java.util.Date;

public class JodaDateDifferentExample {
    public static void main(String[] args) {
        String dateStart = "2013-02-19 09:29:58";
        String dateStop  = "2013-02-20 11:31:48";

        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            Date d1 = format.parse(dateStart);
            Date d2 = format.parse(dateStop);

            DateTime dt1 = new DateTime(d1);
            DateTime dt2 = new DateTime(d2);

            System.out.printf("兩個時間相差:%d 天, %d 小時, %d 分鐘, %d 秒.%n",
                    Days.daysBetween(dt1, dt2).getDays(),
                    Hours.hoursBetween(dt1, dt2).getHours() % 24,
                    Minutes.minutesBetween(dt1, dt2).getMinutes() % 60,
                    Seconds.secondsBetween(dt1, dt2).getSeconds() % 60);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

輸出:

兩個時間相差:1 天, 2 小時, 1 分鐘, 50 秒.

方案對比與建議

維度原生 SDKJoda-Time
代碼複雜度手動換算,易出錯語義化 API,可讀性強
線程安全SimpleDateFormat 非線程安全核心類不可變,線程安全
時區處理繁瑣原生支持
依賴零依賴需引入 joda-time.jar

現代建議:JDK 8+ 請直接使用 java.time 包(LocalDateTime、Duration、Period),它是 Joda-Time 設計的標準化升級版,無需第三方依賴。

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