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

创建一个日期对象

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

[java] view plaincopy print?
  1. import java.util.Date;
  2. public class DateTest {
  3. public static void main(String[] args) {
  4. Date date = new Date();
  5. System.out.println(date);               // Fri Mar 02 22:38:41 CST 2012
  6. System.out.println(date.getTime());     // 1330699121772
  7. }
  8. }

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

日期数据的定制格式

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

[java] view plaincopy print?
  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. public class DateTest {
  4. public static void main(String[] args) {
  5. Date date = new Date();
  6. SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
  7. System.out.println(dateFormat.format(date));                // Friday-March-02-2012
  8. }
  9. }

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

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

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

[java] view plaincopy print?
  1. import java.text.SimpleDateFormat;
  2. import java.util.Date;
  3. public class DateTest {
  4. public static void main(String[] args) {
  5. SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
  6. String txtDate = "3-02-2012";
  7. try {
  8. Date date = dateFormat.parse(txtDate);
  9. System.out.println(date.getTime());                 // 1330617600000
  10. System.out.println(dateFormat.format(date));        // 03-02-2012
  11. } catch (Exception e) {
  12. System.out.println(e.getMessage());
  13. }
  14. }
  15. }

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

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

[java] view plaincopy print?
  1. import java.text.DateFormat;
  2. import java.util.Date;
  3. public class DateTest {
  4. public static void main(String[] args) {
  5. String strDate = null;
  6. Date date = new Date();
  7. System.out.println(date);           // Fri Mar 02 21:43:55 CST 2012
  8. strDate = DateFormat.getDateInstance().format(date);
  9. System.out.println(strDate);        // Mar 2, 2012
  10. // Date
  11. strDate = DateFormat.getDateInstance(DateFormat.DEFAULT).format(date);
  12. System.out.println(strDate);        // Mar 2, 2012
  13. strDate = DateFormat.getDateInstance(DateFormat.SHORT).format(date);
  14. System.out.println(strDate);        // 3/2/12
  15. strDate = DateFormat.getDateInstance(DateFormat.MEDIUM).format(date);
  16. System.out.println(strDate);        // Mar 2, 2012
  17. strDate = DateFormat.getDateInstance(DateFormat.LONG).format(date);
  18. System.out.println(strDate);        // March 2, 2012
  19. strDate = DateFormat.getDateInstance(DateFormat.FULL).format(date);
  20. System.out.println(strDate);        // Friday, March 2, 2012
  21. // DateTime
  22. strDate = DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT).format(date);
  23. System.out.println(strDate);        // Mar 2, 2012 11:06:36 PM
  24. strDate = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT).format(date);
  25. System.out.println(strDate);        // 3/2/12 11:06 PM
  26. strDate = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM).format(date);
  27. System.out.println(strDate);        // Mar 2, 2012 11:06:36 PM
  28. strDate = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG).format(date);
  29. System.out.println(strDate);        // March 2, 2012 11:06:36 PM CST
  30. strDate = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL).format(date);
  31. System.out.println(strDate);        // Friday, March 2, 2012 11:06:36 PM CST
  32. }
  33. }

运行结果: 
Fri Mar 02 23:06:36 CST 2012
Mar 2, 2012
Mar 2, 2012 11:06:36 PM
3/2/12 11:06 PM
Mar 2, 2012 11:06:36 PM
March 2, 2012 11:06:36 PM CST
Friday, March 2, 2012 11:06:36 PM CST
Mar 2, 2012
3/2/12
Mar 2, 2012
March 2, 2012
Friday, March 2, 2012

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

Calendar 类

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

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

[java] view plaincopy print?
  1. import java.text.DateFormat;
  2. import java.util.Date;
  3. import java.util.GregorianCalendar;
  4. public class CalendarTest {
  5. public static void main(String[] args) {
  6. Date date = new Date();
  7. DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
  8. GregorianCalendar calendar = new GregorianCalendar();
  9. calendar.setTime(date);
  10. System.out.println("System Date: " + calendar.getTime());
  11. calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
  12. System.out.println("Day of Week to Friday: \n" + dateFormat.format(calendar.getTime()));
  13. int friday13Counter = 0;
  14. while(friday13Counter <= 10) {
  15. calendar.add(GregorianCalendar.DAY_OF_MONTH, 7);
  16. if(calendar.get(GregorianCalendar.DAY_OF_MONTH) == 13) {
  17. friday13Counter++;
  18. System.out.println(dateFormat.format(calendar.getTime()));
  19. }
  20. }
  21. }
  22. }

运行结果:

System Date: Fri Mar 02 23:37:01 CST 2012
Day of Week to Friday: 
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017

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

  calendar.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY) 和 calendar.add(GregorianCalendar.DAY_OF_MONTH, 7)

set 方法能够让我们通过简单的设置星期中的哪一天这个域来将我们的时间调整为星期五。注意到这里我们使用了常量 DAY_OF_WEEK 和 FRIDAY来增强代码的可读性。

add 方法让我们能够在日期上加上数值,润年的所有复杂的计算都由这个方法自动处理。

我们这个例子的输出结果是: 
System Date: Fri Mar 02 23:33:19 CST 2012

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

Day of Week to Friday: 
Friday, March 2, 2012
Friday, April 13, 2012
Friday, July 13, 2012
Friday, September 13, 2013
Friday, December 13, 2013
Friday, June 13, 2014
Friday, February 13, 2015
Friday, March 13, 2015
Friday, November 13, 2015
Friday, May 13, 2016
Friday, January 13, 2017
Friday, October 13, 2017

时间掌握在你的手里

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

测试代码下载

参考推荐:

Java语言的Calendar和Date类

Java 之 Date 和 Calendar 实例

JAVA Calendar详解

Date类型的转换和运算

“Java语言的Calendar和Date类” 的更多相关文章

from: http://blog.csdn.net/ithomer/article/details/7313878

Java Date 和 Calendar相关推荐

  1. Java Date 和 Calendar 实例

    Java 之 Date 和 Calendar 实例 [java] view plaincopy print? package com.homer.learn; import java.text.Dat ...

  2. java Date 和 Calendar类 万字详解(通俗易懂)

    Date类介绍 Date类构造器 Date类使用 关于SimpleDateFormat类 Date类对象的格式化 构造Date对象的补充 Date类对象成员方法 Calendar类介绍及使用 字段演示 ...

  3. java calendar与date_Java中date和calendar的用法

    获取现在系统的时间和日期看起来是一件非常神奇的事情,但是当使用date和calendar之后发现仍然非常神奇. 1.date 使用date日期之前需要导入包: import java.text.Sim ...

  4. Java中date和calendar的用法

    获取现在系统的时间和日期看起来是一件非常神奇的事情,但是当使用date和calendar之后发现仍然非常神奇. 1.date 使用date日期之前需要导入包: import java.text.Sim ...

  5. Java中实用类:Date、Calendar、Math、Random、String、StringBuffer的用法

    枚举 枚举类是一种特殊的类,里面的值全部都是静态常量,每一个枚举值都相当于一个本类对象, 只不过,调用对象的toString方法打印的是对象名.如: enum Color{BLUE,RED,YELLO ...

  6. java date 实例_Java Date 和 Calendar 实例

    Java 之 Date 和 Calendar 实例 package com.homer.learn; import java.text.DateFormat; import java.text.Par ...

  7. java int相除向上取整_java实战项目常用类,Date、Calendar、BigDecimal、Math、UUID

    Java开发中经常用到的类和方法,以下主要就日期是时间处理.金融数字处理.数学计算.随机数.MD5加密等. java.util.Date类 java.util 包提供了 Date 类来封装当前的日期和 ...

  8. java时间类Date、Calendar及用法

    对于时间类,这篇主要说明各种现实情况下如何取值,怎么定向取值,得到自己想要的时间参数.在java中时间类主要有Date.Calendar,暂时只介绍 java.util.*下的时间类,对于java.s ...

  9. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

    1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...

最新文章

  1. 如何很好的使用Linq的Distinct方法
  2. 世纪回眸:纪念晶体管的发明和由此引出的启发
  3. python datetime datetime_Python datetime.tzinfo方法代碼示例
  4. hdu 5542(树状数组优化dp)
  5. nginx mac 服务器 html,Mac上搭建 nginx 服务器
  6. Shell脚本编程----变量的使用
  7. tomcat 查看当前请求数_原生线程池这么强大,Tomcat 为何还需扩展线程池?
  8. c ++创建二维数组_C ++中的二维数组
  9. 对double变量进行四舍五入并保留两位小数
  10. 独立线程池的作用及IO线程池
  11. 【论文笔记】Joint Cascade Face Detection and Alignment
  12. Java——时间日期格式化
  13. 计算机excer试题,计算机电子表格excel练习题
  14. 嵌入式软件开发必备知识体系
  15. 互联网30年,泡沫如梦,一个个泡沫和风口过后,会是什么样的结局
  16. 嵌入式硬件-读懂原理图
  17. 网络营销决胜武器——软文营销实战方法、案例、问题
  18. PhotoShop基础
  19. 局域网搭建IOS应用在线安装环境
  20. 小程序 php cookie,微信小程序模拟 cookie

热门文章

  1. 一分钟理解softmax函数(超简单)
  2. docker tensorflow-jupyter简单使用
  3. 英国政府开源了其大规模监控软件
  4. 深入理解分布式技术 - 服务注册与发现背后的逻辑
  5. Activity启动模式完全解读-更新中
  6. File转化为MultipartFile
  7. android列表时间轴,Android实现列表时间轴
  8. cc2530期末试卷_ZigBee应用技术答案试题题目及答案,期末考试题库,章节测验答案...
  9. 计算机专业的分支,计算机专业分支(转载)
  10. 神盾特工hive_周末剧透:杰西卡·琼斯、黑名单、时空守卫等