Calendar cal = Calendar.getInstance();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH); // 返回 0-11
int day = cal.get(Calendar.DATE);
String dateStr = day + "/" + month + "/" + year; // 1月顯示為 0
輸出 22/0/2013,月份少 1。
Calendar.MONTH 欄位定義為 **0 基索引**:JANUARY=0, FEBRUARY=1, ..., DECEMBER=11。這是為了方便數組索引(如 monthNames[cal.get(MONTH)])。
int month = cal.get(Calendar.MONTH) + 1; // 關鍵:+1 轉為人類可讀 1-12
String dateStr = String.format(Locale.getDefault(), "%02d/%02d/%04d", day, month, year);
// 或用 SimpleDateFormat 直接格式化
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
String dateStr = sdf.format(cal.getTime());
| 欄位常量 | 範圍 | 說明 |
|---|---|---|
| YEAR | 1-9999 | 年份 |
| MONTH | 0-11 | 月份,**0 基** |
| DATE / DAY_OF_MONTH | 1-31 | 月內日期 |
| DAY_OF_WEEK | 1-7 | 星期,**SUNDAY=1** |
| HOUR_OF_DAY | 0-23 | 24制小時 |
| MINUTE | 0-59 | 分鐘 |
| SECOND | 0-59 | 秒 |
| MILLISECOND | 0-999 | 毫秒 |
// Java 8+ (Android API 26+ / core library desugaring)
LocalDate.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
// Android 通用
new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(new Date());
格式化器自動處理月份 +1、補零、本地化,消除手動拼接錯誤。
Calendar.MONTH 返回 0-11,**顯示/存儲給用戶/數據庫時必須 +1**。棄用手動拼接,改用 SimpleDateFormat 或 DateTimeFormatter 統一格式化,杜絕此類低級錯誤。