在 J2ME 開發中,java.util.Calendar 是處理日期時間的核心類別。但受限於 CLDC 規範,其行為與標準 JDK 略有不同,特別是時區與月份索引的處理常讓初學者踩坑。本文將逐步示範如何正確取得系統時間,並轉換為 YYYYMMDD 格式字串。
TimeZone tz = TimeZone.getDefault();
Calendar ca = Calendar.getInstance(tz);
注意:WTK 模擬器預設時區可能與實機差 8 小時(GMT+8),實機測試時不會出現此偏差。
String strYear = String.valueOf(ca.get(Calendar.YEAR));
String strMonth = String.valueOf(ca.get(Calendar.MONTH) + 1); // 0=1月
String strDate = String.valueOf(ca.get(Calendar.DATE));
String sysDate;
if (ca.get(Calendar.MONTH) + 1 <= 9 && ca.get(Calendar.DATE) <= 9) {
sysDate = strYear + "0" + strMonth + "0" + strDate;
} else if (ca.get(Calendar.MONTH) + 1 > 9 && ca.get(Calendar.DATE) > 9) {
sysDate = strYear + strMonth + strDate;
} else if (ca.get(Calendar.MONTH) + 1 <= 9) {
sysDate = strYear + "0" + strMonth + strDate;
} else {
sysDate = strYear + strMonth + "0" + strDate;
}
System.out.println(sysDate); // 輸出範例:20070904
頻繁字串串接會產生大量暫時物件,建議改用 StringBuffer:
StringBuffer sb = new StringBuffer(8);
sb.append(strYear);
if (month < 10) sb.append('0');
sb.append(month);
if (day < 10) sb.append('0');
sb.append(day);
return sb.toString();
Calendar.JANUARY == 0,取值時必須 +1。TimeZone。getInstance() 取得具體實作。掌握 Calendar 的正確用法,能避免日期時間處理中的隱性 Bug,為行動應用的時間相關功能奠定穩固基礎。