五、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&#61;1;i<&#61;1000000;i&#43;&#43;){//看清楚了&#xff0c;可是一百万次

           sum &#43;&#61;i;

       }

       System.out.println("从1加到1000000的和&#61;"&#43;sum);

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

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

    }

}

运行结果&#xff1a;

从1加到1000000的和&#61;1784293664

从1加到1000000所耗费的时间是&#61;20毫秒

2&#xff0e;DateFormat类和SimpleDateFormat类                                            

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

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

2.1如何初始化

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

构造方法&#xff1a;SimpleDateFormat(String pattern)

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

2.2日期和时间模式

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

定义了以下模式字母&#xff08;所有其他字符 &#39;A&#39; 到 &#39;Z&#39; 和 &#39;a&#39; 到 &#39;z&#39; 都被保留&#xff09;&#xff1a; 

 

字母

日期或时间元素

表示

示例

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

一天中的小时数&#xff08;0-23&#xff09;

Number

0

k

一天中的小时数&#xff08;1-24&#xff09;

Number

24

K

am/pm

中的小时数&#xff08;0-11&#xff09;

Number

h

am/pm

中的小时数&#xff08;1-12&#xff09;

Number

m

小时中的分钟数

Number

30

s

分钟中的秒数

Number

55

S

毫秒数

Number

978

z

时区

General

time

Z

时区

RFC

822

 

2.3常用方法

方法&#xff1a;parse(String source)

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

方法&#xff1a;format(Date date)

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

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

2.4示例

import java.util.*;

import java.text.*;

publicclass Test {

    publicstaticvoid main(String args[]) {

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

       Date d &#61; new Date();

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

       String str &#61; df.format(d);      

       System.out.println("当前时间是&#xff1a;"&#43;str);

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

       try {

           Date d2 &#61; df.parse("2008-08-08 08:08:08 888");

           System.out.println("北京奥运会开幕时间是&#xff1a;"&#43;d2.getTime());

       } catch (ParseException e) {

           e.printStackTrace();

       }     

    }

}

运行结果&#xff1a;

当前时间是&#xff1a;2008-07-22 00:57:45 612

北京奥运会开幕时间是&#xff1a;1218154088888

2.5说明

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

publicclass Test {

    publicstaticvoid main(String args[]) {

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

      

       Date d &#61; new Date(0L);//把时间设为0&#xff0c;表示到基准时间

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

       String str &#61; df.format(d);

      

       System.out.println("基准时间是&#xff1a;"&#43;str);           

    }

}

运行结果&#xff1a;

基准时间是&#xff1a;1970-01-01 08:00:00 000 

3&#xff0e;Calendar类                                                                    

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

3.1如何初始化

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

如下&#xff1a;Calendar c &#61; Calendar.getInstance();

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

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

方法&#xff1a;get(int field)

          返回给定日历字段的值

示例如下&#xff1a;

Import java.util.Calendar;

publicclass Test {

    publicstaticvoid main(String args[]) {

       Calendar c &#61; Calendar.getInstance();

       int year &#61; c.get(Calendar.YEAR);

       int month &#61; c.get(Calendar.MONTH);//注意&#xff1a;month特殊&#xff0c;是从0开始的&#xff0c;也就是0表示1月

       int day &#61; c.get(Calendar.DAY_OF_MONTH);

      

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

    }

}

运行结果&#xff1a;

现在是2008年7月22日 

3.3使用Calendar进行日期运算

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

    方法&#xff1a;add(int field, int amount)

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

示例如下&#xff1a;

publicclass Test {

    publicstaticvoid main(String args[]) {

       Calendar c &#61; Calendar.getInstance();

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

      

       int year &#61; c.get(Calendar.YEAR);

       int month &#61; c.get(Calendar.MONTH);//注意&#xff1a;month特殊&#xff0c;是从0开始的&#xff0c;也就是0表示1月

       int day &#61; c.get(Calendar.DAY_OF_MONTH);

      

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

    }

}

运行结果&#xff1a;在当前日期加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 &#61; Calendar.getInstance();

      

        c.setTimeInMillis(1234567890123L);

      

       int year &#61; c.get(Calendar.YEAR);

       int month &#61; c.get(Calendar.MONTH);//注意&#xff1a;month特殊&#xff0c;是从0开始的&#xff0c;也就是0表示1月

       int day &#61; c.get(Calendar.DAY_OF_MONTH);

      

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

    }

}

运行结果&#xff1a;设置的时间是2009年2月14日 

 

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