J2ME 開發中不可避免涉及日期時間處理,CLDC 與 MIDP 提供三大核心類別:java.util.Date、java.util.Calendar、javax.microedition.lcdui.DateField。本文詳細說明三者協作流程與實戰技巧。
TIME(時分秒)、DATE(年月日)、DATE_TIME(完整)三種輸入模式,繼承自 Item 需 append 至 Form 使用。關鍵方法:setDate()、getDate()(回傳 Date 物件)Date 設為當前時間後,可輕鬆取得年月日時分秒// 1. 從 DateField 取得用戶設定的 Date 物件
Date date = dateField.getDate();
// 2. 取得 Calendar 實例並設定時間
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// 3. 取出各時間欄位(注意:MONTH 從 0 起算,需 +1)
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR);
int min = calendar.get(Calendar.MINUTE);
int sec = calendar.get(Calendar.SECOND);
package com.j2medev.time;
import java.util.Calendar;
import java.util.Date;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class TimeMIDlet extends MIDlet implements CommandListener {
private Display display;
private DateField dateField;
private Form mainForm;
private static final Command OK_CMD = new Command("確定", Command.OK, 1);
protected void startApp() {
initMIDlet();
}
private void initMIDlet() {
display = Display.getDisplay(this);
dateField = new DateField("選擇日期時間", DateField.DATE_TIME);
mainForm = new Form("日期時間測試");
mainForm.append(dateField);
mainForm.addCommand(OK_CMD);
mainForm.setCommandListener(this);
display.setCurrent(mainForm);
}
protected void pauseApp() {}
protected void destroyApp(boolean unconditional) {}
public void commandAction(Command cmd, Displayable disp) {
if (cmd == OK_CMD) {
Date date = dateField.getDate();
Calendar cal = Calendar.getInstance();
cal.setTime(date);
mainForm.append(getDetailInfo(cal));
}
}
private String getDetailInfo(Calendar cal) {
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1; // 關鍵:月份從 0 起算
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR);
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
return year + "年" + month + "月" + day + "日 " +
hour + "時" + min + "分" + sec + "秒";
}
}
Calendar.MONTH 回傳 0~11,務必 +1 才是實際月份DATE/TIME/DATE_TIME,避免多餘輸入Date 僅作時間戳記傳遞,複雜運算全靠 Calendar掌握這三類別協作模式,J2ME 日期時間處理將不再是難題。