五、Java日期操作的类                                              

1.Date类                                                                      

java.util包里面的Date类,是Java里面进行日期操作常用类。Date类用来表示特定的瞬间,精确到毫秒。

1.1如何初始化Date

构造方法:Date()

          分配 Date 对象并初始化此对象,以表示分配它的时候的当前时间(精确到毫秒)。使用Date类得到当前的时间。 

构造方法:Date(long date)

          分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 格林威治时间)以来的指定毫秒数。

2.2常用方法

      方法:after(Date when)

          测试此日期是否在指定日期之后

方法:before(Date when)

    测试此日期是否在指定日期之前

方法:getTime()

          返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。 

2.3示例:简单的性能测试——监控一段代码运行所需要的时间

publicclass Test {

    publicstaticvoid main(String args[]) {

       long d1 = new Date().getTime();//得到此时的时间

       int sum = 0;

       for(int i=1;i<=1000000;i++){//看清楚了,可是一百万次

           sum +=i;

       }

       System.out.println("从1加到1000000的和="+sum);

       long d2 = new Date().getTime();//得到此时的时间

       System.out.println("从1加到1000000所耗费的时间是="+(d2-d1)+"毫秒");

    }

}

运行结果:

从1加到1000000的和=1784293664

从1加到1000000所耗费的时间是=20毫秒

2.DateFormat类和SimpleDateFormat类                                            

在java.text包中的DateFormat类,是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期——>文本)、解析(文本——> 日期)和标准化。

由于DateFormat是个抽象类,SimpleDateFormat类是它的子类,所以下面就主要按照SimpleDateFormat类来讲解。 

2.1如何初始化

这里只讲述最常用到的构造方法,更多的请参看JDK文档。

构造方法:SimpleDateFormat(String pattern)

          用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat

2.2日期和时间模式

日期和时间格式由日期和时间模式 字符串指定。在日期和时间模式字符串中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素。文本可以使用单引号 (') 引起来,以免进行解释。"''" 表示单引号。所有其他字符均不解释;只是在格式化时将它们简单复制到输出字符串,或者在解析时与输入字符串进行匹配。

定义了以下模式字母(所有其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保留): 

 

字母

日期或时间元素

表示

示例

G

Era

标志符

Text

y

Year

1996;

M

年中的月份

Month

July;

w

年中的周数

Number

27

W

月份中的周数

Number

2

D

年中的天数

Number

189

d

月份中的天数

Number

10

F

月份中的星期

Number

2

E

星期中的天数

Text

Tuesday;

a

Am/pm

标记

Text

H

一天中的小时数(0-23)

Number

0

k

一天中的小时数(1-24)

Number

24

K

am/pm

中的小时数(0-11)

Number

h

am/pm

中的小时数(1-12)

Number

m

小时中的分钟数

Number

30

s

分钟中的秒数

Number

55

S

毫秒数

Number

978

z

时区

General

time

Z

时区

RFC

822

 

2.3常用方法

方法:parse(String source)

      从给定字符串的开始解析文本,以生成一个日期

方法:format(Date date)

          将一个 Date 格式化为日期/时间字符串

这里只讲述最常用的方法,更多的方法请参看JDK文档。

2.4示例

import java.util.*;

import java.text.*;

publicclass Test {

    publicstaticvoid main(String args[]) {

       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");      

       Date d = new Date();

       //把当前时间转换成为我们熟悉的时间表达格式

       String str = df.format(d);      

       System.out.println("当前时间是:"+str);

       //然后再把字符串格式的日期转换成为一个Date类

       try {

           Date d2 = df.parse("2008-08-08 08:08:08 888");

           System.out.println("北京奥运会开幕时间是:"+d2.getTime());

       } catch (ParseException e) {

           e.printStackTrace();

       }     

    }

}

运行结果:

当前时间是:2008-07-22 00:57:45 612

北京奥运会开幕时间是:1218154088888

2.5说明

虽然JDK文档上说Date的毫秒值,是相对于格林威治时间1970年1月1号的0点,但实际测试,这个Date是跟时区相关的,也就是说在中国测试这个基准值应该是1970年1月1日的8点,不过这个不影响我们的处理,因为只要是同一个基准时间就可以了,而不用关心具体是多少,见下面的示例:

publicclass Test {

    publicstaticvoid main(String args[]) {

       DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

      

       Date d = new Date(0L);//把时间设为0,表示到基准时间

       //然后转换成为字符串看看是什么时候

       String str = df.format(d);

      

       System.out.println("基准时间是:"+str);           

    }

}

运行结果:

基准时间是:1970-01-01 08:00:00 000 

3.Calendar类                                                                    

java.util包中的Calendar类是Java里面另外一个常用的日期处理的类。Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等 之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

3.1如何初始化

Calendar类是通过一个静态方法getInstance()来获取Calendar实例。返回的 Calendar 基于当前时间,使用了默认时区和默认语言环境

如下:Calendar c = Calendar.getInstance();

3.2使用Calendar对日期进行部分析取

Calendar类一个重要的功能就是能够从日期里面按照要求析取出数据,如:年、月、日、星期等等。

方法:get(int field)

          返回给定日历字段的值

示例如下:

Import java.util.Calendar;

publicclass Test {

    publicstaticvoid main(String args[]) {

       Calendar c = Calendar.getInstance();

       int year = c.get(Calendar.YEAR);

       int month = c.get(Calendar.MONTH);//注意:month特殊,是从0开始的,也就是0表示1月

       int day = c.get(Calendar.DAY_OF_MONTH);

      

       System.out.println("现在是"+year+"年"+(month+1)+"月"+day+"日");

    }

}

运行结果:

现在是2008年7月22日 

3.3使用Calendar进行日期运算

这是Calendar另外一个常用的功能,也就是对日期进行加加减减的运算。

    方法:add(int field, int amount)

          根据日历的规则,为给定的日历字段添加或减去指定的时间量 

示例如下:

publicclass Test {

    publicstaticvoid main(String args[]) {

       Calendar c = Calendar.getInstance();

       c.add(Calendar.DATE, 12);//当前日期加12天,如果是-12就表示当前日期减去12天

      

       int year = c.get(Calendar.YEAR);

       int month = c.get(Calendar.MONTH);//注意:month特殊,是从0开始的,也就是0表示1月

       int day = c.get(Calendar.DAY_OF_MONTH);

      

       System.out.println("在当前日期加12天是"+year+"年"+(month+1)+"月"+day+"日");

    }

}

运行结果:在当前日期加12天是2008年8月3日 

3.4为Calendar设置初始值

方法setTime(Date date)

          使用给定的 Date 设置此 Calendar 的当前时间

方法setTimeInMillis(long millis)

      用给定的 long 值设置此 Calendar 的当前时间值

publicclass Test {

    publicstaticvoid main(String args[]) {

       Calendar c = Calendar.getInstance();

      

        c.setTimeInMillis(1234567890123L);

      

       int year = c.get(Calendar.YEAR);

       int month = c.get(Calendar.MONTH);//注意:month特殊,是从0开始的,也就是0表示1月

       int day = c.get(Calendar.DAY_OF_MONTH);

      

       System.out.println("设置的时间是"+year+"年"+(month+1)+"月"+day+"日");

    }

}

运行结果:设置的时间是2009年2月14日 

 

Java私塾跟我学系列——JAVA  网址:http://www.javass.cn  电话:010-68434236