Calendar用法

from:http://www.jssay.com/blog/index.php/2010/08/25/jdk学习笔记之 calendar用法/

当我们需要处理时间问题的时候,我们首先想到的是Date类型,然而熟悉Date API的人一定都知道,这个类的许多方法都被废弃了,取而代之的是Calendar类,Calendar的中文意思是“日历”,因此用他来处理时间问题, 也算是实至名归了,下面是我对Calendar的一些理解,不足之处请指正。 

一.Calendar是一个抽象类,不能直接New一个实例,可以有两种方法得到它的实例: 
方法一:Calendar cal = new GregorianCalendar(); //GregorianCalendar是Calendar的实现类, 
方法二:Calendar cal = Calendar.getInstance(); 
通过以上方法获得的实例,默认都是当前日期。我们可以通过以下代码验证一下: 

//此时是2010年8月25日15时18分18秒

Java代码
  1. Calendar cal = Calendar.getInstance();   
  2. System.out.println("DAY_OF_WEEK: "+cal.get(Calendar.DAY_OF_WEEK));   
  3. System.out.println("DAY_OF_MONTH: "+cal.get(Calendar.DAY_OF_MONTH));   
  4. System.out.println("DAY_OF_YEAR: "+cal.get(Calendar.DAY_OF_YEAR));   
  5. System.out.println("YEAR: "+cal.get(Calendar.YEAR));   
  6. System.out.println("MONTH: "+cal.get(Calendar.MONTH));   
  7. System.out.println("HOUR_OF_DAY : "+cal.get(Calendar.HOUR_OF_DAY));   
  8. System.out.println("MINUTE : "+cal.get(Calendar.MINUTE)); System.out.println("SECOND : "+cal.get(Calendar.SECOND));  



得到的结果如下: 
DAY_OF_WEEK: 4 
DAY_OF_MONTH: 25 
DAY_OF_YEAR: 237 
YEAR: 2010 
MONTH: 7 
HOUR_OF_DAY : 15 
MINUTE : 18 
SECOND : 18 

注意: 
DAY_OF_WEEK表示星期几。从星期日开始到星期六为一个周期,数字表示依次为:1,2,3……7。 
MONTH的表示是从数字0开始,所以月份应该是该数字+1. 

二. 很多情况下,我们需要进行时间的计算,如:将某个时间向前推几小时、几天、几个月等。这个时候我们就需要对Calendar设定一个时间值。 

我们有几种常见的设置方法: 
方法一:setTime(Date date) 

方法二: 
set(int field, int value) 

方法三: 
set(int year, int month, int date) 
set(int year, int month, int date, int hourOfDay, int minute) 
set(int year, int month, int date, int hourOfDay, int minute, int second) 

方法四:setTimeInMillis(long millis) 

在进行时间运算的时候,我们经常会用到如下方法: 
add(int field, int amount) 

示例代码: 

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.DATE, 1); 
System.out.println(cal.getTime()); 

结果如下: 
Thu Aug 26 15:49:03 CST 2010 

以上是将时间向后推,如果要向前推,将第二个参数(amount)改成负数即可。 

三. 另外,Calendar还提供几个非常好用的日期比较函数: 
after(Object when) 
before(Object when) 
equals(Object when) 
compareTo(Calendar anotherCalendar) 

需要注意的是:上面的Object参数类型必须是Calendar的实例(instance),否则就没有意义了。示例代码:

Java代码
  1. Calendar cal = Calendar.getInstance();   
  2. Calendar cal2 = Calendar.getInstance();   
  3.   
  4. cal2.setTimeInMillis(1282023123371L);   
  5.   
  6. System.out.println("Date1: " + cal.getTime());   
  7. System.out.println("Date2: " + cal2.getTime());   
  8.   
  9. System.out.println("Date1 is later than Date2: " + cal.after(cal2));   
  10. System.out.println("Date1 is earlier than Date2: " + cal.before(cal2));   
  11. System.out.println("Date1 equals Date2: " + cal.equals(cal2));   
  12. System.out.println("Date1 compare to Date2: " + cal.compareTo(cal2));  



运行结果为: 
Date1: Wed Aug 25 16:18:07 CST 2010 
Date2: Tue Aug 17 13:32:03 CST 2010 
Date1 is later than Date2: true 
Date1 is earlier than Date2: false 
Date1 equals Date2: false 
Date1 compare to Date2: 1 

compareTo()函数的返回值有三个:0 1 -1,分别表示相等、大于(表示第一个时间离现在较近)、小于(表示第一个时间离现在较远)。 

四. 总结 
相比Date类型,Calendar显得更加灵活和强大。掌握Calendar的用法必将为你的开发之路打下良好的基础。更多详情请查阅JDK1.5帮助 文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值