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

Java 日期時間處理大全:SimpleDateFormat、Calendar 與 Java 8 新 API 完整實戰指南

     編輯:Java 綜合教學

傳統日期時間 API 核心類

Java 8 之前主要使用 java.util.Date、SimpleDateFormat 和 Calendar 處理日期時間,雖然存在線程不安全、設計混亂等問題,但在維護舊系統時仍需掌握。

SimpleDateFormat 線程安全陷阱

關鍵警示:SimpleDateFormat 非線程安全,多執行緒共享實例會導致解析錯誤或數據錯亂。正確做法:

  • 方法局部變量創建實例
  • 使用 ThreadLocal 緩存
  • Java 8+ 遷移至 DateTimeFormatter(線程安全)

常用格式化模式對照表

模式字母含義示例
yyyy年份2024
MM月份01-12
dd日期01-31
HH24小時制00-23
mm分鐘00-59
ss秒00-59
SSS毫秒000-999

核心工具類 VeDate 完整實現

public class VeDate {
    // 獲取當前時間字符串 yyyy-MM-dd HH:mm:ss
    public static String getStringDate() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }

    // 字符串轉 Date (yyyy-MM-dd)
    public static Date strToDate(String strDate) {
        return new SimpleDateFormat("yyyy-MM-dd").parse(strDate);
    }

    // 計算兩日期間隔天數
    public static long getDays(String date1, String date2) {
        Date d1 = strToDate(date1);
        Date d2 = strToDate(date2);
        return (d1.getTime() - d2.getTime()) / (24 * 60 * 60 * 1000);
    }

    // 判斷閏年
    public static boolean isLeapYear(String date) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(strToDate(date));
        int year = cal.get(Calendar.YEAR);
        return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
    }

    // 獲取月份最後一天
    public static String getEndDateOfMonth(String date) {
        // ... 實現邏輯
    }
}

Java 8 全新時間 API (java.time) 推薦遷移

Java 8 引入 LocalDate、LocalTime、LocalDateTime、ZonedDateTime 等不可變、線程安全的類:

// 現代寫法
LocalDateTime now = LocalDateTime.now();
String formatted = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDate parsed = LocalDate.parse("2024-01-15");
Period period = Period.between(startDate, endDate); // 精確計算年月日差

最佳實踐總結

  • 新項目:強制使用 java.time 包
  • 舊系統:封裝工具類統一管理 SimpleDateFormat 實例
  • 數據庫交互:使用 java.sql.Timestamp 或 JPA 的 @Temporal
  • 序列化:ISO-8601 格式 (yyyy-MM-dd'T'HH:mm:ss.SSSZ) 作為標準
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved