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

Java 時間日期處理全攻略:Calendar、Date、格式化、間隔計算與數據庫映射

     編輯:Java 程式設計入門

核心類對比

常用操作代碼速查

1. 獲取月份最大天數

Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2024);
cal.set(Calendar.MONTH, 1); // 2月 (0-based)
int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH); // 29

2. Calendar ↔ Date 轉換

Date date = cal.getTime();
cal.setTime(date);

3. 格式化輸出

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = sdf.format(new Date());

4. 計算年內第幾周 / 周首尾日期

cal.set(2024, Calendar.MARCH, 15);
int weekOfYear = cal.get(Calendar.WEEK_OF_YEAR);

cal.set(2024, Calendar.JANUARY, 1);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // 本周一

5. add() vs roll()

  • add:字段溢出進位(月份、年份聯動)
  • roll:字段循環,不進位(如 12月 roll +1 → 1月,年份不變)

6. 兩日期間隔天數(精確版)

public static int daysBetween(Calendar d1, Calendar d2) {
    if (d1.after(d2)) { Calendar t=d1; d1=d2; d2=t; }
    int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
    int y2 = d2.get(Calendar.YEAR);
    if (d1.get(Calendar.YEAR) != y2) {
        d1 = (Calendar) d1.clone();
        do { days += d1.getActualMaximum(Calendar.DAY_OF_YEAR); d1.add(Calendar.YEAR, 1); }
        while (d1.get(Calendar.YEAR) != y2);
    }
    return days;
}

7. String ↔ Date ↔ Long 互轉

// String → Date
Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2024-01-15 12:30:00");
// Date → Long
long ts = d.getTime();
// Long → String
String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date(ts));

8. 數據庫映射類型選擇

類包特點
Datejava.util毫秒時間戳,多數方法已棄用
Calendarjava.util抽象基類,字段操作靈活,線程不安全
SimpleDateFormatjava.text格式化/解析,非線程安全
LocalDateTimejava.time (JDK8+)不可變、線程安全、API 豐富(推薦)
// 字符串 → sql.Date
java.sql.Date sqlDate = new java.sql.Date(sdf.parse("2024-01-15").getTime());
// 字符串 → sql.Timestamp
Timestamp sqlTs = Timestamp.valueOf("2024-01-15 12:30:00.123");

JDK 8+ java.time 現代 API 推薦

LocalDateTime now = LocalDateTime.now();
LocalDate date = LocalDate.parse("2024-01-15");
Period period = Period.between(date, LocalDate.now());
Duration duration = Duration.between(LocalDateTime.now(), LocalDateTime.now().plusHours(2));
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
數據庫類型Java 類型適用場景
DATEjava.sql.Date僅年月日
DATETIME/TIMESTAMPjava.sql.Timestamp含時分秒毫秒