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

Java 日期時間工具類 DateUtil:格式化、解析、加減運算、年齡計算、區間判斷完整版

     編輯:Java 相關知識

核心功能清單

  • 字串 ↔ Date 互轉 (支援自訂格式)
  • 日期加減 (年/月/日)
  • 取得昨日、N日前、上週一/週日
  • 依年月取得天數、閏年判斷
  • 兩日期差:年月日 / 總天數
  • 時間戳 (秒) 互轉
  • 當前時間是否在區間內
  • 日期正規化 (去除時分秒)

關鍵方法簽名與說明

方法說明
str2Date(String, String)字串解析為 Date,第二參數為 pattern
date2Str(Date, String)Date 格式化輸出字串
changeDate(Date, "year|month|date", int)日期加減,支援年/月/日
getBeforeDate(Date, int)取得 N 天前日期
getLastWeekStart/End(Date)上週一/週日 (以週一為週首)
getday(month, year)該年該月天數
patienage(start, end, type)type=1 回傳「X年Y月Z天」,type=0 回傳總天數
getTime(String)日期字串轉 Unix 秒時間戳
checkTime(String, String)當前時間是否在每日 HH:mm 區間
checkDate(String, String)當前時間是否在完整日期區間
formatDate(Date)正規化為 00:00:00

使用範例


Date now = new Date();
System.out.println(DateUtil.date2Str(now, "yyyy-MM-dd HH:mm:ss"));
// 2024-05-20 14:30:00

Date d = DateUtil.str2Date("2024-12-25", "yyyy-MM-dd");
System.out.println(DateUtil.changeDate(d, "month", -1));
// 2024-11-25 00:00:00

System.out.println(DateUtil.patienage(
        DateUtil.str2Date("2000-01-01", "yyyy-MM-dd"), new Date(), 1));
// 24年4月19天

System.out.println(DateUtil.checkTime("09:00", "18:00")); // 上班時間判斷

實作重點與避坑

  1. Calendar 是可變物件:每次操作建議 Calendar.getInstance() 重新取得,避免狀態汙染。
  2. SimpleDateFormat 非執行緒安全:工具類內部**每次新建實例**,不可共用 static 欄位。
  3. String 不可變:sync 鎖字串並重新賦值會導致鎖失效 (見同專案其他文章),本類未涉及同步。
  4. Java 8+ 建議遷移至 java.time:LocalDate, DateTimeFormatter, ChronoUnit 等不可變、執行緒安全、API 更豐富。

Java 8 現代寫法對照


// 解析
LocalDate ld = LocalDate.parse("2024-05-20", DateTimeFormatter.ISO_LOCAL_DATE);
// 加減
LocalDate ld2 = ld.minusMonths(1);
// 差值
long days = ChronoUnit.DAYS.between(ld, LocalDate.now());
// 格式化
String out = ld2.format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));

新專案優先使用 java.time,舊專案維護可沿用本 DateUtil。

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