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

Java 時間比較工具類:計算兩個時間字符串或與當前時間的秒級差值

     編輯:Java 相關知識

工具類完整代碼

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

public class DateTimeUtils {
    private static final String FORMAT = "yyyy.MM.dd HH:mm:ss";
    private static final SimpleDateFormat SDF = new SimpleDateFormat(FORMAT);

    /**
     * 比較兩個時間字符串,返回秒差 (time2 - time1)
     */
    public static long compare(String time1, String time2) {
        Date d1 = SDF.parse(time1, new ParsePosition(0));
        Date d2 = SDF.parse(time2, new ParsePosition(0));
        if (d1 == null || d2 == null) return -1;
        return (d2.getTime() - d1.getTime()) / 1000L;
    }

    /**
     * 比較指定時間與當前時間,返回秒差 (now - time1)
     */
    public static long compareNow(String time1) {
        Date d1 = SDF.parse(time1, new ParsePosition(0));
        if (d1 == null) return -1;
        return (System.currentTimeMillis() - d1.getTime()) / 1000L;
    }
}

使用示例

// 計算兩時間差
long diff = DateTimeUtils.compare("2023.01.01 12:00:00", "2023.01.01 12:05:30"); // 330

// 計算距今秒數
long ago = DateTimeUtils.compareNow("2023.01.01 12:00:00"); // 當前時間減去該時間的秒數

設計要點

  • 線程安全:SimpleDateFormat 非線程安全,此處為簡化示例使用單例;高併發環境建議使用 ThreadLocal 或 JDK 8+ DateTimeFormatter
  • 解析容錯:ParsePosition(0) 避免拋出異常,返回 null 表示格式錯誤
  • 毫秒轉秒:除以 1000L 取整,適合會話超時、緩存過期等秒級精度場景
  • 格式固定:yyyy.MM.dd HH:mm:ss (24小時制),可根據需求擴展為可配置格式

適用場景

  • Session 最後訪問時間檢查
  • 緩存條目存活時間判斷
  • 定時任務觸發條件評估
  • 日誌分析中時間間隔統計

此工具類代碼簡潔、依賴最小、語義清晰,可直接集成到項目公共庫中。

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