首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android Calendar 獲取月份需 +1 的常見陷阱:MONTH 欄位 0-11

     編輯:程式設計綜合問答

問題代碼


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());

Calendar 常用欄位速查

欄位常量範圍說明
YEAR1-9999年份
MONTH0-11月份,**0 基**
DATE / DAY_OF_MONTH1-31月內日期
DAY_OF_WEEK1-7星期,**SUNDAY=1**
HOUR_OF_DAY0-2324制小時
MINUTE0-59分鐘
SECOND0-59秒
MILLISECOND0-999毫秒

最佳實踐:避免手動拼接,用 SimpleDateFormat / DateTimeFormatter


// 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 統一格式化,杜絕此類低級錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved