在日期格式化一文中我曾经简单的叙述了从一个java.util.Date日期类输出定制日期格式文本的方法。今天我们将进入一个真正的难题,去了解java中真正的日期对象Calendar类,并且在分析过程中建立一个实用swing日历Bean。
本人曾经在网上搜索过一些实用swing日历,但他们的实现都比较复杂,在这里我们将只使用一个类和标准的swing组件来实现这个日历,从而使这个Bean可以简单的被复用到别处。
一、Calendar是什么?
Calendar类是java标准库提供的日历工具类,它是一个抽象类。在它之中定义了很多有用的方法,最有用的就是可以自由变换日期和时间的set方法,以及得到定制日期输出的get方法。因为Calendar是一个抽象类,所以它不能使用new方法创建实例,它需要使用下面这个方法得到实例:Calendar calendar=Calendar.getInstance();
在Calendar类中把日期分成年、月、日、时、分、秒、微秒、星期八个部分,每一个部分又有一个或多个域(Field)与之对应,在使用set或get方法时,实际上是通过这些域来访问的。每一个域都是一个静态整型常量,它们是:
域
代表意义
AM_PM
上午/下午标志
DATE
完整日期标志
DAY_OF_MONTH
本月第几天
DAY_OF_WEEK
星期几
DAY_OF_WEEK_IN_MONTH
(尚未理解)
DAY_OF_YEAR
本年度的第几天
DST_OFFSET
时区偏移量
ERA
公元标志
HOUR
小时(12小时制,分上下午)
HOUR_OF_DAY
小时(24小时制,不分上下午)
MILLISECOND
微秒
MINUTE
分钟
MONTH
月份
SECOND
秒
WEEK_OF_MONTH
本月第几个星期
WEEK_OF_YEAR
本年度的第几个星期
YEAR
年份
ZONE_OFFSET
相对GMT时区的微秒级时间偏移
除了通过set和get方法访问域值的功能外,Calendar还提供了一些有用的方法:
方法
参数
意义
getActualMaximum
int field
得到当前时间指定域值的最大值
getActualMinimum
同上
得到当前时间指定域值的最小值
getFirstDayOfWeek
空
得到当前时区一个星期第一天的表示,
如:在美国星期天是一个星期的第一天;
在法国则是星期一。
getTime
空
返回一个java.util.Date日期对象
getTimeInMillis
空
返回当前时间的微秒累计值,就像
java.util.Date中的getTime方法一样
getTimeZone
空
返回当前时区
isSet
int field
设置域是否可以改写
setFirstDayOfWeek
int value
设置当前时区一个星期第一天的表示,
如:在美国星期天是一个星期的第一天;
在法国则是星期一。
setTime
Date date
为当前日历重新设置一个java.util.Date
日期对象作为当前时间
setTimeInMillis
空
设置一个时间的微秒累计值作为当前时间
setTimeZone
TimeZone value
设置当前的时区
这里只是大概的叙述了一下Calendar类的概况,如果想更加清楚的了解其中的细节,请查看j2sesdk提供的Calendar源文件。
本文地址:http://com.8s8s.com/it/it16677.htm