時間的兩種表達
- 長整數毫秒值:自 GMT 1970-01-01 00:00 起的毫秒數,適合計算時間差。
long t = System.currentTimeMillis();
- 物件導向:
java.util.Date、java.util.Calendar,適合提取年月日、格式化顯示。
三大核心類
| 類別 | 取得當前時間 | 主要用途 |
| System | System.currentTimeMillis() | 高效時間戳、效能測量、簡單差值計算 |
| Date | new Date() 或 new Date(millis) | 輕量時間物件、toString() 直接顯示、與毫秒值互轉 |
| Calendar | Calendar.getInstance() | 完整日期運算:取年/月/日/時/分/秒/星期、加減日期、格式化 |
互轉操作範例
// 1. System → Date
Date date = new Date(System.currentTimeMillis());
// 2. Date → Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(date);
// 3. Calendar → Date → millis
Date d = cal.getTime();
long millis = d.getTime(); // 同 cal.getTimeInMillis() (CLDC 1.1+)
// 4. 直接建立特定時間 Calendar
Calendar cal2 = Calendar.getInstance();
cal2.set(2024, Calendar.DECEMBER, 25, 12, 0, 0); // 月份 0-based!
Calendar 關鍵操作
- 取欄位:
cal.get(Calendar.YEAR)、MONTH、DATE、HOUR_OF_DAY、MINUTE、SECOND、DAY_OF_WEEK (1=Sunday)。
- 月份陷阱:
Calendar.JANUARY = 0 ... DECEMBER = 11,輸入/顯示時需 ±1。
- 日期加減:
cal.add(Calendar.DATE, 7) (一週後)、cal.add(Calendar.MONTH, -1) (一個月前)。
- 比較:
cal1.before(cal2)、after()、equals()。
最佳實踐
- 單純計算間隔用
System.currentTimeMillis() 最輕量。
- 需顯示/解析年月日用
Calendar,注意月份 0-based。
- CLDC 1.0 無
Calendar.getTimeInMillis(),轉 Date 再取 getTime()。
- 持久化儲存建議存毫秒長整數 (RMS 節省空間),顯示時再轉物件。