在 Java 開發中,日期時間與字符串的轉換是高頻操作。SimpleDateFormat 是傳統方案的核心工具類,但需注意其非線程安全特性。本文通過完整示例演示格式化、解析與比較操作。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateTest {
public static void main(String[] args) throws ParseException {
// 1. Date -> String
Date now = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 注意:大寫 SS 為毫秒,小寫 ss 為秒
String dateStr = sdf.format(now);
System.out.println("格式化後:" + dateStr);
// 2. String -> Date
String input = "2016-11-01 13:10:12";
Date parsed = sdf.parse(input);
System.out.println("解析後:" + parsed);
// 3. 日期比較
int cmp = now.compareTo(parsed);
System.out.println("比較結果:" + cmp + " (大於0表示now較晚)");
}
}
yyyy年、MM月、dd日、HH24小時、mm分、ss秒、SSS毫秒。SimpleDateFormat 非線程安全,多線程環境下請使用 ThreadLocal 或 Java 8+ 的 DateTimeFormatter(不可變、線程安全)。parse() 拋出 ParseException,需捕獲或拋出。compareTo()、before()、after()、equals() 均可用於日期比較。import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime ldt = LocalDateTime.now();
String str = ldt.format(fmt);
LocalDateTime parsed = LocalDateTime.parse(str, fmt);
建議新項目優先使用 java.time 包,避免舊 API 的諸多坑點。