`
jssay
  • 浏览: 27621 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK学习笔记之Calendar用法

    博客分类:
  • Java
阅读更多
原创文章,转载请注明出处!
本文地址: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秒
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帮助文档。

由于水平有限,文中难免会有错误之处,敬请指正。
分享到:
评论

相关推荐

    java JDK 8学习笔记

    本学习笔记旨在深入解析JDK 8的关键特性,帮助初学者快速掌握这一版本的核心知识。 1. **lambda表达式**:JDK 8引入了lambda表达式,简化了函数式编程。它允许将匿名函数作为方法参数,或者用作方法返回值。Lambda...

    《jdk8学习笔记》PPT+课后习题答案

    2. **方法引用来代替lambda**:除了lambda,JDK8还允许使用方法引用,它可以直接引用已有方法作为函数接口的实现,无需再写一个新的匿名类。 3. **Stream API**:Stream API为处理集合数据提供了新的方式,支持并行...

    Java JDK 8学习笔记 带完整书签(不是页码书签哦)

    《Java JDK 8学习笔记》是由林信良教授在2015年3月出版的一本详尽解析Java SE 8新特性的书籍,由清华大学出版社发行。这本书共计643页,内容完整且清晰,包含目录和书签,便于读者高效地查阅和学习。 在Java JDK 8...

    Java jdk 8 学习笔记 源码.zip

    这份"Java jdk 8 学习笔记 源码.zip"压缩包显然是为了帮助学习者深入理解这一版本的Java编程语言。下面将详细探讨Java JDK 8中的关键知识点。 1. **Lambda表达式**: Lambda表达式是JDK 8最重要的特性之一,它简化...

    Java JDK 8学习笔记-2015年版-带书签-高清影印

    这份2015年的学习笔记是针对Java 8的详细教程,包含了丰富的知识内容和书签标记,方便读者快速定位和复习。 1. **Lambda表达式**:Java 8引入了lambda表达式,这是一种简洁的匿名函数表示法,可以作为方法参数或...

    Java JDK 8学习笔记

    Java JDK 8是Java开发工具包的一个重大更新,它引入了一系列新特性,旨在提升开发者效率,简化编程模型,并增强性能。...《Java JDK 8学习笔记》这本书可能会详细讲解这些内容,并提供实例来帮助读者深入理解。

    良葛格Java JDK 5.0学习笔记

    通过《良葛格Java JDK 5.0学习笔记》,初学者可以全面了解这些新特性的概念、用法以及如何在实际项目中应用。这些知识对于理解和掌握现代Java编程至关重要,也是Java程序员必须掌握的基础技能。

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 书籍 计算机书籍  《java jdk 7学习笔记》是作者多年来教学实践经验的总结...

    java jdk5.0学习笔记——良葛格

    良葛格的《Java JDK5.0学习笔记》是一本面向初学者的教程,旨在帮助读者掌握这个版本的核心概念和技术。以下是基于该书部分内容的知识点详解: 1. **泛型**:JDK 5.0引入了泛型,这是一种强大的类型系统增强,允许...

    良葛格Java JDK 5.0学习笔记ch03

    良葛格的Java JDK 5.0学习笔记涵盖了这些关键知识点,让我们一起深入探讨。 1. **自动装箱与拆箱**: JDK 5.0引入了自动装箱和拆箱机制,使得基本类型与对应的包装类之间可以无缝转换。例如,int与Integer之间的...

    Java JDK 8学习笔记(简体中文) - 2015第1版

    这份“Java JDK 8学习笔记”涵盖了这一版本的关键知识点,对于初学者和进阶者都是宝贵的参考资料。 1. **lambda表达式**:JDK 8引入了lambda表达式,它简化了函数式编程,使得处理集合数据时的代码更加简洁。Lambda...

    良葛格Java JDK 5.0学习笔记ch02

    这里,我们主要探讨的是良葛格对于Java JDK 5.0的深入学习笔记,尤其聚焦于第二章的内容。在这一章中,良葛格可能会涵盖以下几个关键知识点: 1. **自动装箱与拆箱**:Java 5.0引入了自动装箱和拆箱机制,使得基本...

    java学习笔记JDK6课件之十八

    在JDK6中,主要使用`java.util.Date`和`java.text.SimpleDateFormat`类来处理日期和时间。以下是对这些知识点的详细说明: 1. **`System.currentTimeMillis()`**: 这是一个静态方法,返回从1970年1月1日0时0分0秒...

    Java JDK 6学习笔记——ppt简体版 第21章.ppt

    "Java JDK 6学习笔记——ppt简体版 第21章.ppt" 是一份关于Java Standard Edition 6(Java SE 6)新特性的讲解资料。在这个章节中,主要介绍了几个重要的更新,包括字符串处理、数组操作、日期与时间的国际化、以及...

    java实战经典学习笔记

    ### Java实战经典学习笔记知识点概览 #### 一、Java概述及开发环境搭建 - **Java概述** - Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。 - Java的设计目标是“一次编写,到处运行”,这...

    jdk8 api chm

    3. **Stream API**:这是JDK 8中最重要的改进之一,提供了一种处理集合数据的新方式。Stream API允许我们进行并行和顺序数据处理,支持过滤、映射、归约等操作,使得代码更加简洁和高效。 4. **方法引用**:除了...

    jdk1.8.0_131_linux.tar.gz

    4. **Date and Time API**:取代了旧的java.util.Date和java.util.Calendar,提供了更强大且易于使用的日期和时间处理功能,如LocalDate、LocalTime、LocalDateTime和ZonedDateTime等。 5. **方法引用和构造器引用*...

    jdk8191wy.rar

    2. **方法引用和构造器引用**:这些引用使我们能够直接使用已有的方法或构造器,而无需在lambda表达式中重新定义它们。 3. **流(Stream)**:流API为处理集合数据提供了一种新的、声明性的方法,支持并行和串行操作...

    JAVA 下载 jdk1.8

    安装JDK后,开发者可以使用Java编译器(javac)将源代码编译成字节码,使用Java虚拟机(JVM)运行编译后的程序,同时还可以利用Java调试器(jdb)进行调试,以及使用Java性能分析工具(jconsole、jvisualvm等)监控...

Global site tag (gtag.js) - Google Analytics