日期时间操作是J2me开发中的一个重点,然而J2me发展到现在,鉴于设备性能的局限性,其Date对象一直是Java 3版本下的简易版本,仅仅提供一个Date对象和uint类型的转换工作以及获取当前时间,其他的格式化等功能完全没有提供。翻了一下API可知,Java 3将Data对象的一些字段操作写在了java.util.Calendar包。

使用Calendar对象操作Date对象主要分为以下三步:

  1. 首先要指定时区,但是在模拟器上测试时只能支持+0时区的,实机未测试,一般使用不带参数的getInstance静态方法获取一个Calendar的实例。
  2. 其次是使用setDate实例方法传入一个已知的Date对象,如果获取的是当前时间的信息可以省略这一步,不必使用setDate(new Date())获取当前时间。在第一步getInstance之后其内部存储的Date值就是当前时间。
  3. 之后就可以使用get和set方法对Date对象的某些字段进行操作,在Calendar类中声明了许多用于作为字段名的常量,如YEAR、MONTH、DATE、DAY_OF_WEEK、HOUR_OF_DAY、HOUR、AM_PM、MINUTE、SECOND,以及MILLISECOND等。使用这些字段时要注意以下几点:
    1. MONTH的返回值范围是0-11,即0是一月、1是二月、11是十二月。此外也可以使用Calendar的常量进行比较,Calendar对象提供了从JANUARY到DECEMBER的常量供比较。
    2. DATE和DAY_OF_MONTH是同义词,其值从1开始。
    3. DAY_OF_WEEK返回周几,其值从1开始,现实从周日开始,即1是周日,2是周一,6是周日。Calendar对象同样提供了SUNDAY到SATURDAY的常量供比较。
    4. HOUR是基于12小时制的,配合AM_PM使用,HOUR的值是1-12,即没有0点的说法,每天从12:00AM开始。12:00AM是午夜,之前的一分钟是前一天的11:59PM。12:00PM是中午,之前的一分钟是当天的11:59AM。AM_PM的返回值是0或1,0为AM,1为PM,同样提供了AM和PM两个常量使用。
    5. HOUR_OF_DAY是基于24小时制,取值范围是0-23,注意时区对其的影响。
  4. 如果在set字段之后需要提取Data对象,同样可以使用Calendar对象的getDate方法获取。

综上所述,Java3中对时间的操作主要集中在Calendar对象,而Date对象的主要作用是存储一个时间值,即一个uint。所以当编写一些比较简单的日期时间程序时Calendar对象完全可以取代Date对象。Data对象的主要作用还是集中在DateField的数据导出以及序列化上。