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

Java 8 日期時間 API (java.time) 實戰指南:20 個高頻場景代碼模板

     編輯:Java 相關知識

Java 8 引入 java.time 包,徹底解決舊 API (Date, Calendar, SimpleDateFormat) 不可變、非線程安全、設計混亂等歷史包袱。本文提供 20 個生產級高頻場景模板。

核心類速查

類用途關鍵特性
Instant時間戳 (納秒精度)UTC、機器時間、等價舊 Date
LocalDate日期 (年月日)無時區、生日/記念日
LocalTime時間 (時分秒納秒)無日期、鬧鐘/營業時間
LocalDateTime日期時間無時區、本地日程
ZonedDateTime帶時區日期時間含時區規則、用戶顯示、跨時區業務
Duration時間間隔秒/納秒、Instant 間差
Period日期間隔年月日、LocalDate 間差

20 個高頻場景代碼模板

  1. 當前日期:LocalDate.now()
  2. 指定日期:LocalDate.of(2024, 1, 15)
  3. 解析字符串:LocalDate.parse("2024-01-15", DateTimeFormatter.ISO_LOCAL_DATE)
  4. 格式化輸出:date.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"))
  5. 增減天/月/年:date.plusDays(7), date.minusMonths(1), date.plus(1, ChronoUnit.YEARS)
  6. 獲取年/月/日/星期:date.getYear(), date.getMonthValue(), date.getDayOfWeek()
  7. 本月天數/閏年:date.lengthOfMonth(), date.isLeapYear()
  8. 日期比較:date1.isBefore(date2), date1.isAfter(date2), date1.equals(date2)
  9. 兩日期間隔:Period.between(start, end).getDays() / .getMonths()
  10. 當前時間:LocalTime.now()
  11. 時間增減:time.plusHours(2)
  12. 日期時間合成/拆分:LocalDateTime.of(date, time), ldt.toLocalDate()
  13. 時區轉換:ZonedDateTime.of(localDateTime, ZoneId.of("America/New_York"))
  14. 時區間轉換:zoned.withZoneSameInstant(ZoneId.of("Asia/Shanghai"))
  15. 時間戳互轉:Instant.now(), Date.from(instant), date.toInstant()
  16. 固定格式解析:DateTimeFormatter.ofPattern("yyyyMMdd").parse("20240115")
  17. 自定義格式化:DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss z", Locale.US)
  18. 期間計算:Duration.between(startInstant, endInstant).toMinutes()
  19. 時鐘注入 (測試):Clock clock = Clock.fixed(Instant.parse("2024-01-15T10:00:00Z"), ZoneOffset.UTC); LocalDate.now(clock)
  20. 数据库交互:JDBC 4.2+ 直接 ps.setObject(1, localDate) / rs.getObject(i, LocalDate.class)

避坑指南

  • 線程安全:所有類不可變、線程安全,DateTimeFormatter 可作 static final 共享。
  • mm vs MM:mm 分鐘,MM 月份,切勿混淆。
  • ZoneId 字符串:區分大小寫,用 ZoneId.getAvailableZoneIds() 查驗。
  • 舊 API 互操作:Date.toInstant(), Date.from(instant),避免 GregorianCalendar。

拋棄 SimpleDateFormat 與 Calendar,擁抱 java.time 的不可變、領域驅動設計,讓時間處理成為業務邏輯的可靠基石。

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