`
bruce198
  • 浏览: 232951 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java语言的Calendar和Date类

    博客分类:
  • java
阅读更多
 

Java 语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分。所有的开发者都应该能够计算未来的日期,定制日期的显示格式,并将文本数据解析成日期对象。

创建一个日期对象

让我们看一个使用系统的当前日期和时间创建一个日期对象并返回一个长整数。这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。

  1. import java.util.Date;   
  2.   
  3. public class DateExample1 {   
  4.   
  5.     public static void main(String[] args) {   
  6.         // Get the system date/time   
  7.         Date date = new Date();   
  8.         System.out.println(date.getTime());   
  9.   
  10.     }   
  11. }  

在星期六,2001年9月29日,下午大约是6:50的样子,上面的例子在系统输出设备上显示的结果是 1001803809710。值得注意的是我们使用了Date 构造函数创建一个日期对象,这个构造函数没有接受任何参数,而这个构造函数在内部使用了System.currentTimeMillis() 方法来从系统获取日期。现在我们已经知道了如何获取从1970年1月1日开始经历的毫秒数了。我们如何才能以一种用户明白的格式来显示这个日期呢? 在这里类java.text.SimpleDateFormat 和它的抽象基类 java.text.DateFormat 就派得上用场了。

日期数据的定制格式

假如我们希望定制日期数据的格式,比方星期六-9月-29日-2001年. 下面的例子展示了如何完成这个工作:

  1. import java.text.SimpleDateFormat;   
  2. import java.util.Date;   
  3.   
  4. public class DateExample2 {   
  5.   
  6.     public static void main(String[] args) {   
  7.   
  8.         SimpleDateFormat bartDateFormat = new SimpleDateFormat(   
  9.                 "EEEE-MMMM-dd-yyyy");   
  10.         Date date = new Date();   
  11.         System.out.println(bartDateFormat.format(date));   
  12.   
  13.     }   
  14. }  

只要通过向SimpleDateFormat 的构造函数传递格式字符串"EEE-MMMM-dd-yyyy",我们就能够指明自己想要的格式。格式字符串中的ASCII 字符告诉格式化函数下面显示日期数据的哪一个部分。EEEE是星期,MMMM是月,dd是日,yyyy是年。字符的个数决定了日期是如何格式化的。传递"EE-MM-dd-yy"会显示 Sat-09-29-01。

将文本数据解析成日期对象

假设我们有一个文本字符串包含了一个格式化了的日期对象,我们希望解析这个字符串并从文本日期数据创建一个日期对象。我们将再次以格式化字符串"MM-dd-yyyy" 调用SimpleDateFormat类。但是这一次,我们使用格式化解析而不是生成一个文本日期数据。我们的例子,显示在下面,将解析文本字符串"9-29-2001"并创建一个值为001736000000 的日期对象。

  1. import java.text.SimpleDateFormat;   
  2. import java.util.Date;   
  3.   
  4. public class DateExample3 {   
  5.   
  6.     public static void main(String[] args) {   
  7.   
  8.         // Create a date formatter that can parse dates of   
  9.         // the form MM-dd-yyyy.   
  10.         SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");   
  11.         // Create a string containing a text date to be parsed.   
  12.         String dateStringToParse = "9-29-2001";   
  13.         try {   
  14.             // Parse the text version of the date.   
  15.             // We have to perform the parse method in a   
  16.             // try-catch construct in case dateStringToParse   
  17.             // does not contain a date in the format we are expecting.   
  18.             Date date = bartDateFormat.parse(dateStringToParse);   
  19.             // Now send the parsed date as a long value   
  20.             // to the system output.   
  21.   
  22.             System.out.println(date.getTime());   
  23.   
  24.         }   
  25.   
  26.         catch (Exception ex) {   
  27.             System.out.println(ex.getMessage());   
  28.         }   
  29.     }   
  30. }  

使用标准的日期格式化过程

  1. import java.text.DateFormat;   
  2. import java.util.Date;   
  3.   
  4. public class DateExample4 {   
  5.   
  6.     public static void main(String[] args) {   
  7.   
  8.         Date date = new Date();   
  9.         DateFormat shortDateFormat = DateFormat.getDateTimeInstance(   
  10.         DateFormat.SHORT, DateFormat.SHORT);   
  11.         DateFormat mediumDateFormat = DateFormat.getDateTimeInstance(   
  12.         DateFormat.MEDIUM, DateFormat.MEDIUM);   
  13.         DateFormat longDateFormat = DateFormat.getDateTimeInstance(   
  14.         DateFormat.LONG, DateFormat.LONG);   
  15.         DateFormat fullDateFormat = DateFormat.getDateTimeInstance(   
  16.         DateFormat.FULL, DateFormat.FULL);   
  17.         System.out.println(shortDateFormat.format(date));   
  18.         System.out.println(mediumDateFormat.format(date));   
  19.         System.out.println(longDateFormat.format(date));   
  20.         System.out.println(fullDateFormat.format(date));   
  21.   
  22.     }   
  23.   
  24. }  


注意我们在对 getDateTimeInstance的每次调用中都传递了两个值:第一个参数是日期风格,而第二个参数是时间风格。它们都是基本数据类型int(整型)。考虑到可读性,我们使用了DateFormat 类提供的常量: SHORT,MEDIUM,LONG,和 FULL。

运行我们的例子程序的时候,它将向标准输出设备输出下面的内容:

9/29/01 8:44 PM

Sep 29,2001 8:44:45 PM

September 29,2001 8:44:45 PM EDT

Saturday,September 29,2001 8:44:45 PM EDT

Calendar 类

我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢? 答案是使用Calendar 类。

假设你想要设置,获取,和操纵一个日期对象的各个部分,比方一个月的一天或者是一个星期的一天,为了演示这个过程,我们将使用具体的子类 java.util.GregorianCalendar。 考虑下面的例子,它计算得到下面的第十个星期五是13号。

  1. import java.util.GregorianCalendar;   
  2. import java.util.Date;   
  3. import java.text.DateFormat;   
  4.   
  5. public class DateExample5 {   
  6.   
  7.     public static void main(String[] args) {   
  8.   
  9.         DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);   
  10.         // Create our Gregorian Calendar.   
  11.         GregorianCalendar cal = new GregorianCalendar();   
  12.         // Set the date and time of our calendar   
  13.         // to the system´s date and time   
  14.         cal.setTime(new Date());   
  15.         System.out.println("System Date: " + dateFormat.format(cal.getTime()));   
  16.   
  17.         // Set the day of week to FRIDAY   
  18.         cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);   
  19.   
  20.         System.out.println("After Setting Day of Week to Friday: "  
  21.                 + dateFormat.format(cal.getTime()));   
  22.   
  23.         int friday13Counter = 0;   
  24.   
  25.         while (friday13Counter <= 10) {   
  26.   
  27.             // Go to the next Friday by adding 7 days.   
  28.              cal.add(GregorianCalendar.DAY_OF_MONTH,7);   
  29.             // If the day of month is 13 we have   
  30.             // another Friday the 13th.   
  31.   
  32.             if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13) {   
  33.                 friday13Counter++;   
  34.                 System.out.println(dateFormat.format(cal.getTime()));   
  35.             }   
  36.         }   
  37.     }   
  38. }  


在这个例子中我们作了有趣的函数调用:

cal.set(GregorianCalendar.DAY_OF_WEEK,

GregorianCalendar.FRIDAY);

和:cal.add(GregorianCalendar.DAY_OF_MONTH,7);

set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五。注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性。add 方法让我们能够在日期上加上数值,润年的所有复杂的计算都由这个方法自动处理。

我们这个例子的输出结果是:

System Date: Saturday,September 29,2001

当我们将它设置成星期五以后就成了:

Friday,September 28,2001

Friday,September 13,2002

Friday,December 13,2002

Friday,June 13,2003

Friday,February 13,2004

Friday,August 13,2004

Friday,May 13,2005

Friday,January 13,2006

Friday,October 13,2006

Friday,April 13,2007

Friday,July 13,2007

Friday,June 13,2008

时间掌握在你的手里

有了这些Date 和Calendar 类的例子,你应该能够使用 java.util.Date,java.text.SimpleDateFormat,和 java.util.GregorianCalendar 创建许多方法了。



既然我们已经可以生成和解析定制的日期格式了,让我们来看一看如何使用内建的格式化过程。方法 DateFormat.getDateTimeInstance() 让我们得以用几种不同的方法获得标准的日期格式化过程。下面是我们获取了四个内建的日期格式化过程。它们包括一个短的,中等的,长的,和完整的日期格式。
分享到:
评论

相关推荐

    java语言中使用的类总结

    系统总结了 1.Date类 2.Calendar类 3.Math类与Biglnteger类 4.LinkedList泛型类 5.HashSet泛型类 6.HashMap,V&gt;泛型类 7.TreeSet泛型类 8.TreeMap,V&gt;泛型类 9.Stack泛型类 等方面的含义用法和范例。。。

    使用Java的Calendar类计算两段时间之间的工作日的天/小时/分钟/秒数

    该工具类用于两个时间段之间节假日的计算(可获取两个时间段之间的节假日天数,小时,分钟,秒)

    (超赞)JAVA精华之--深入JAVA API

    1.1.4 与时间有关的类Date,DateFormat,Calendar 1.2 深入理解嵌套类和内部类 1.2.1 什么是嵌套类及内部类? 1.2.2 静态嵌套类 1.2.3 在外部类中定义内部类 1.2.4 在方法中定义内部类 1.2.5 匿名内部类 1.2.6 内部类...

    利用Java中Calendar计算两个日期之间的天数和周数

    Java 语言的Calendar(日历),Date(日期),和DateFormat(日期格式)组成了Java标准的一个基本但是非常重要的部分。日期是商业逻辑计算一个关键的部分。下面这篇文章就给大家介绍了如何利用Java中Calendar计算两个日期...

    Java语音学习,基础教程

    熟悉常用API:包括Date、DateFormat、Calendar、System和StringBuilde等,这些是在Java编程中经常用到的类和方法。 学习集合:理解Java中的Collection、泛型、List、Set、Collections、Map和HashMap等概念和用法。 ...

    Java2实用教程.rar

    4 4 1实例变量和类变量的区别 4 4 2实例方法和类方法的区别 4 5this关键字 4 6包 4 6 1包语句 4 6 2import语句 4 6 3将类打包 4 7访问权限 4 7 1私有变量和私有方法 4 7 2共有变量和共有方法 4 7 3友好变量和友好...

    JAVA SE学习精华集锦

    1.1.4 与时间有关的类Date,DateFormat,Calendar 47 1.2 深入理解嵌套类和内部类 47 1.2.1 什么是嵌套类及内部类? 47 1.2.2 静态嵌套类 48 1.2.3 在外部类中定义内部类 48 1.2.4 在方法中定义内部类 49 1.2.5 匿名...

    JAVA基础课程讲义

    JAVA语言应用范围 18 第一个JAVA程序 18 JAVA开发环境搭建 18 一个典型的JAVA程序的编写和运行过程 19 第一个程序常见错误 20 第一个JAVA程序的总结和提升 20 常用Java开发工具 20 常用dos命令 21 本章笔试作业 21 ...

    java内部学习笔记.docx

    Java语言基础 7 2.1基础语言要素 7 2.2八种基本数据类型 7 2.3常量和变量 8 2.4运算符与表达式 8 2.5编程风格 9 2.6流程控制语句 10 2.7数组 11 2.8字符串 11 2.9方法三要素 12 2.10插入排序 12 2.11冒泡排序 12 ...

    张孝祥Java就业培训教程.pdf

    6.8 Date与Calendar,DateFormat类 6.9 Math与Random类 6.10 学习API的方法 第7章 IO/输入输出 7.1 File类 7.2 RandomAccessFile类 7.3 节点流 7.4 过滤流与包装类 7.5 IO中的高级应用 第8章 图形用户界面GUI(一) ...

    疯狂JAVA讲义

    1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6 1.3.2 Java程序的...

    AIC的Java课程1-6章

     能够使用Date, Calendar, Locale, DateFormat,NumberFormat类创建、改变和显示日期、数字和货币对象。  理解正则表达式,学会使用String.matches方法,Pattern和Matcher类进行模式匹配。  学会...

    Mac版本Java8下载jdk-8u371-macosx-x64.dmg.zip

    Java 8 是 Java 编程...Java 8 还引入了一些新的时间日期 API,它们替代了旧有的 Date 和 Calendar 类的使用。新的时间日期 API 更加易用和灵活,而且支持时区、精度等概念,非常适合处理跨时区应用程序的时间问题。

    java课程设计方案(1).doc

    (3)研究意义:通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合 实际的能力。 2 设计要求 (1)日记本使用Java语言开发设计。课程的基本功能包括万年历、记事本和辅助功能三个 部分。 (2)万年历部分...

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

    1.1 java不只是语言 2 1.1.1 前世今生 2 1.1.2 三大平台 5 1.1.3 jcp与jsr 6 1.1.4 建议的学习路径 7 1.2 jvm/jre/jdk 11 1.2.1 什么是jvm 11 1.2.2 区分jre与jdk 14 1.2.3 下载、安装jdk 15 ...

    java课程设计方案.doc

    (3)研究意义:通过本次课程设计,我们掌握了Java语言的基本运用,提高了理论结合 实际的能力。 2 设计要求 (1)日记本使用Java语言开发设计。课程的基本功能包括万年历、记事本和辅助功能三个 部分。 (2)万年历部分...

    JDateButton:JDateButton是Java日期选择实用程序-开源

    JDateButton是一个Java日期选择实用程序,用于以图形方式选择日期。... 以前的版本基于Date和Calendar类。 版本v2.0.0已迁移到JavaFX。 v2.1.0版合并了两个代码库,分别提供了JavaFX和Swing jar文件

    Java开发技术大全 电子版

    第3章对象和类98 3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建类体105 3.2.4对象的生命...

    java基础类库

    使用 String、StringBuffer和StringBuilder来处理字符串,ate和Calendar来处理日期、时间,其中Date是一个已经过时的API,通常推荐使用Calendar来处理日期、时间。 正则表达式是一个强大的文本处理工具,通过正则...

Global site tag (gtag.js) - Google Analytics