| 類 | 包 | 特點 |
| Date | java.util | 毫秒時間戳,多數方法已棄用 |
| Calendar | java.util | 抽象基類,字段操作靈活,線程不安全 |
| SimpleDateFormat | java.text | 格式化/解析,非線程安全 |
| LocalDateTime | java.time (JDK8+) | 不可變、線程安全、API 豐富(推薦) |
常用操作代碼速查
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. 數據庫映射類型選擇
| 數據庫類型 | Java 類型 | 適用場景 |
| DATE | java.sql.Date | 僅年月日 |
| DATETIME/TIMESTAMP | java.sql.Timestamp | 含時分秒毫秒 |
// 字符串 → 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");
- 上一篇文章: Java DES 對稱加密解密完整工具類實現
- 下一篇文章: 無序鏈表去重算法:C 語言與 Java 兩種實現對比
Copyright ©
程式碼之家 All Rights Reserved