java.util.Date 表示特定瞬間,精確到毫秒。雖然 JDK 8+ 推薦使用 java.time.Instant/LocalDateTime,但 Date 仍廣泛存在於存量代碼、JDBC、第三方庫交互中,掌握其核心 API 必不可少。
// 1. 當前時間 Date date = new Date(); // 精確到毫秒 // 2. 指定毫秒時間戳 (自 1970-01-01 00:00:00 UTC) long timestamp = System.currentTimeMillis(); Date date2 = new Date(timestamp);
// Date → long (時間戳) long ts = date.getTime(); // 等價 date.getTime() // long → Date date.setTime(ts); // 修改現有對象時間 // 或 new Date(ts) 創建新對象
Date d1 = new Date(1000); // 1970-01-01 00:00:01 Date d2 = new Date(2000); // 1970-01-01 00:00:02 // 1. before/after boolean before = d1.before(d2); // true boolean after = d1.after(d2); // false // 2. compareTo (實現 Comparable) int cmp = d1.compareTo(d2); // -1 (d1 < d2) /* 返回值: 0 : 相等 <0 : 此日期在參數日期之前 >0 : 此日期在參數日期之後 */
| 需求 | 代碼 |
|---|---|
| 獲取當前時間戳 | System.currentTimeMillis() 或 new Date().getTime() |
| 判斷日期先後 | date1.before(date2) / date1.compareTo(date2) < 0 |
| 日期加減運算 | new Date(date.getTime() + 24*3600*1000) (建議用 Calendar/LocalDateTime) |
| 格式化輸出 | SimpleDateFormat.format(date) (詳見下篇) |
fastTime 可通過 setTime() 修改,非線程安全,多線程環境勿共享實例。toString() 默認使用 JVM 默認時區 (如 CST),不攜帶時區信息。System.nanoTime() 或 Instant。Date(year, month, date)、getYear()、getMonth() 等均已棄用,請用 Calendar 或 java.time。java.sql.Date/Time/Timestamp 繼承自 java.util.Date,可直接 setTimestamp/getTimestamp。// 當前瞬間
Instant now = Instant.now(); // UTC 時區
long epochMilli = now.toEpochMilli(); // 毫秒時間戳
// 本地日期時間 (無時區)
LocalDateTime ldt = LocalDateTime.now(); // 系統默認時區
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
// 格式化 (線程安全)
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String str = ldt.format(fmt);
LocalDateTime parsed = LocalDateTime.parse(str, fmt);