当我们需要处理时间问题的时候,我们首先想到的是Date类型,然而熟悉Date API的人一定都知道,这个类的许多方法都被废弃了,取而代之的是Calendar类,Calendar的中文意思是“日历”,因此用他来处理时间问题,也算是实至名归了,下面是我对Calendar的一些理解,不足之处请指正。
一.Calendar是一个抽象类,不能直接New一个实例,可以有两种方法得到它的实例:
方法一:Calendar cal = new GregorianCalendar(); //GregorianCalendar是Calendar的实现类,
方法二:Calendar cal = Calendar.getInstance();
通过以上方法获得的实例,默认都是当前日期。我们可以通过以下代码验证一下:
//此时是2010年8月25日15时18分18秒
Calendar cal = Calendar.getInstance();
System.out.println("DAY_OF_WEEK: "+cal.get(Calendar.DAY_OF_WEEK));
System.out.println("DAY_OF_MONTH: "+cal.get(Calendar.DAY_OF_MONTH));
System.out.println("DAY_OF_YEAR: "+cal.get(Calendar.DAY_OF_YEAR));
System.out.println("YEAR: "+cal.get(Calendar.YEAR));
System.out.println("MONTH: "+cal.get(Calendar.MONTH));
System.out.println("HOUR_OF_DAY : "+cal.get(Calendar.HOUR_OF_DAY));
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),否则就没有意义了。示例代码:
Calendar cal = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal2.setTimeInMillis(1282023123371L);
System.out.println("Date1: " + cal.getTime());
System.out.println("Date2: " + cal2.getTime());
System.out.println("Date1 is later than Date2: " + cal.after(cal2));
System.out.println("Date1 is earlier than Date2: " + cal.before(cal2));
System.out.println("Date1 equals Date2: " + cal.equals(cal2));
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帮助文档。
由于水平有限,文中难免会有错误之处,敬请指正。
原创文章,转载请注明出处!
本文地址:http://www.jssay.com/blog/index.php/2010/08/25/jdk学习笔记之calendar用法/
分享到:
相关推荐
Java JDK 7学习笔记 PDF
java jdk 学习笔记java jdk 学习笔记java jdk 学习笔记
Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解 Java JDK 7学习笔记 此学习笔记适合初学者完成学习总结,加深理解
良葛格java jdk 5.0学习笔记,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip,良葛格java jdk 5.0学习笔记.zip。
Java JDK 6学习笔记.zipJava JDK 6学习笔记.zip Java JDK 6学习笔记.zip Java JDK 6学习笔记.zip
Java+JDK6学习笔记,PDF格式,压缩文件有2.1M。
Java JDK 5.0学习笔记 入门级别 新手必看
JavaJDk7学习笔记
《Java JDK7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、操作、应用或认证考试等问题及解决方案。《Java JDK7学习笔记》针对java se 7新功能全面改版,无论是章节架构...
jdk6.0学习笔记 jdk学习笔记 java学习 web编程
林信良的jdk学习笔记,1.6版的源代码
良葛格————JavaJDK5.0学良葛格————JavaJDK5.0学习笔记PDF.rar习笔记PDF.rar良葛格良葛格————JavaJDK5.0学习笔记PDF.rar————JavaJDK5.0学习笔记PDF.rar良葛格————JavaJDK5.0学习笔记PDF.rar良...
Java、JDK6、良葛、林信良、Java学习笔记 我没看到实体书,不知是否相同, 近些日学习一下ruby方面的,顺便看看java方面的, 这个是Java JDK6的学习笔记电子版, 压缩包里包含两个文件, 一个是chm格式(这个还行吧)...
良葛格 Java JDK 5.0学习笔记,适合基础的同学看
《Java JDK 6 学习笔记》配书示例 《Java JDK 6 学习笔记》配书示例
这里有JDK 6 JAVA 学习笔记书中的所有代码.非常好的.用的着的朋友可以看看.
良葛格Java JDK 5.0学习笔记[可打印] 良葛格Java JDK 5.0学习笔记[可打印]
Java JDK 6学习笔记_pdf版(附课本代码) Java JDK 6学习笔记_pdf版(附课本代码)
《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新。并详细介绍了jvm、jre、java se api、jdk与ide之间的对照关系。必要时从java se api的源代码分析,...
Java+JDK6学习笔记,最新版本,学习Java的必备教材。