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

J2ME 日期時間處理完全指南:Date、Calendar 與 DateField 實戰

     編輯:J2ME

J2ME 開發中不可避免涉及日期時間處理,CLDC 與 MIDP 提供三大核心類別:java.util.Date、java.util.Calendar、javax.microedition.lcdui.DateField。本文詳細說明三者協作流程與實戰技巧。

核心類別職責

  • DateField (UI 元件):收集用戶輸入的日期時間,支援 TIME(時分秒)、DATE(年月日)、DATE_TIME(完整)三種輸入模式,繼承自 Item 需 append 至 Form 使用。關鍵方法:setDate()、getDate()(回傳 Date 物件)
  • Date (資料載體):J2ME 版本精簡,許多 J2SE 方法/欄位被移除,主要作為時間戳記傳遞
  • Calendar (運算引擎):提供豐富欄位存取方法,將 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);

完整 MIDlet 範例

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 + "秒";
    }
}

關鍵提醒

  1. 月份陷阱:Calendar.MONTH 回傳 0~11,務必 +1 才是實際月份
  2. 模式選擇:依需求選擇 DATE/TIME/DATE_TIME,避免多餘輸入
  3. Date 精簡性:J2ME 的 Date 僅作時間戳記傳遞,複雜運算全靠 Calendar

掌握這三類別協作模式,J2ME 日期時間處理將不再是難題。

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