Java 提供多種時間處理方式,從傳統 Date/Calendar 到 Java 8 全新 java.time 套件。本文涵蓋主流舊版 API 實戰,並簡述現代最佳實踐。
import java.util.Date;
import java.text.SimpleDateFormat;
public class NowString {
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(new Date())); // 例:2024-05-20 14:30:45
}
}
| 符號 | 含義 | 範例 |
|---|---|---|
| yyyy | 年份 | 2024 |
| MM | 月份 | 05 |
| dd | 日期 | 20 |
| HH | 24小時制 | 14 |
| mm | 分鐘 | 30 |
| ss | 秒數 | 45 |
String sql = "SELECT CONVERT(varchar(10), bookDate, 126) AS convertBookDate " +
"FROM roomBook WHERE bookDate BETWEEN '2007-4-10' AND '2007-4-25'";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String sql = "SELECT bookDate FROM roomBook WHERE bookDate BETWEEN ? AND ?";
// 執行查詢後
System.out.println(sdf.format(rs.getDate("bookDate")));
import java.util.Calendar;
import java.util.Date;
import java.text.SimpleDateFormat;
public class TestDate {
public static void main(String[] args) {
Date now = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
System.out.println(df.format(now));
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH); // 0-based!
int date = c.get(Calendar.DATE);
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.printf("%d/%d/%d %d:%d:%d%n", year, month+1, date, hour, minute, second);
}
}
注意:Calendar.MONTH 從 0 開始,實際月份需 +1。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date time = null;
try {
time = sdf.parse("2024-05-20");
} catch (ParseException e) {
e.printStackTrace();
}
String str = sdf.format(new Date());
ThreadLocal 快取。
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(now.format(fmt)); // 線程安全、不可變、API 更豐富
掌握 Date、Calendar、SimpleDateFormat 的協作細節,能應付絕大多數舊系統維護需求。新專案請直接擁抱 java.time,享受不可變、線程安全、功能強大的現代時間 API。