Date & Calendar & TimeZone
Date类:是指java.util包下的Date类,它提供了6个构造器,但有4个已不推荐使用了,剩下的2个是:
1、Date():生成一个代表当前日期时间的Date对象,该方法在底层调用System.currentTimeMillis()获得long整数作为日期参数。
2、Date(long date):根据指定的long型整数来生成一个Date对象,该构造器的参数表示创建的Date对象和GMT1970.1.1 00:00:00之间的时间差,以毫秒作为单位。
以下是Date剩下为数不多的方法:
1、boolean after(Date when):测试该日期是否在指定日期when之后。
2、boolean before(Date when):测试该日期是否在指定日期when之前。
3、int compareTo(Date date):比较两个日期的大小,如果相等返回0,如果前者大于后者返回大于0的值,否则返回小于0的值。
4、boolean equals(Object obj):当两个时间表示同意时刻则返回true。
5、long getTime():返回该事件对应的long型整数,即从GMT1970.1.1 00:00:00到该时间之间的时间差,以毫秒作为单位。
6、void setTime(long time):设置该Date对象的时间。
Calendar类:Calendar是一个抽象类,所以不能创建实例,程序只能创建它子类的实例,java本身提供了一个GregorianCalendar类,一个代表Calendar的子类。
Calendar和Date都是表示日期的工具类,它们可以直接自由转换:
public static void main(String[] args) {
Calendar c1=Calendar.getInstance();//Calendar不能实例化,所以只能以这种方式来获得Calendar的对象
Date d1=c1.getTime();//从Calendar对象中取出Date对象
Calendar c2=Calendar.getInstance();
c2.setTime(d1);
}
//Calendar方法演示
public static void main(String[] args) {
Calendar c1=Calendar.getInstance();
System.out.println(c1.get(Calendar.YEAR));//获取年
System.out.println(c1.get(Calendar.MONTH));//获取月
System.out.println(c1.get(Calendar.DATE));//获取日
c1.set(2012, 02, 20, 12, 32, 23);//设置年月日时分秒
System.out.println(c1.getTime());
c1.add(Calendar.YEAR, -1);//向前推一年
c1.roll(Calendar.MONTH, -8);//向前推8个月
}
add与roll的区别:
add()的两条规则:
1、当被修改的字段超出它允许的范围时,会发生进位,即上一级字段也会增大
2、如果下一级的字段也需要改变,则该字段会修正到变化最小的值。
public static void main(String[] args) {
Calendar c1=Calendar.getInstance();
c1.set(2012,7,23,0,0,0);//2012-8-23
c1.add(Calendar.MONTH, 6);//2013-2-23
c1.set(2012,7,31,0,0,0);//2012-8-31
c1.add(Calendar.MONTH, 6);//2013-2-28,并不是改成2013-3-3
}
roll的两条规则:
1、当被修改的字段超出它允许的范围时,上一级字段不会增大
2、与add()相同
设置Calendar的容错性:setLenient(false)可以关闭Calendar的容错性,让它进行严格的参数检查。
set方法延迟修改:set(f,value)方法将日历字段f更改为value,尽管日历字段f是立即更改的,但Calendar所代表的时间却不会立即修改,直到下次调用get(),getTime(),getTimeInMillis(),add(),roll()时才会重新计算日历的时间,采用延迟修改的优势是多次调用set()不会触发多次不必要的计算。
TimeZone类:
可以使用TimeZone设置程序中时间所属的时区,其中TimeZone就代表了时区。TimeZone是一个抽象类,不能调用其构造器来创建实例,但可以调用它的静态方法:getDefaule(可得到运行机器上的默认时区)或getTimeZone(可根据时区ID来获取对应的时区)得到TimeZone实例。
方法例子
public static void main(String[] args) {
String[] ids=TimeZone.getAvailableIDs();//取得java所支持的所有时区ID
System.out.println(Arrays.toString(ids));
TimeZone my=TimeZone.getDefault();//获取系统默认时区的ID
System.out.println(my.getID());
System.out.println(my.getDisplayName());//获取系统默认时区的名称
System.out.println(TimeZone.getTimeZone("CNT").getDisplayName());//获取指定ID的时区的名称
}