Thinking in Java---使用Java处理日期和时间

来源:互联网 发布:一小时编程 编辑:程序博客网 时间:2024/06/04 09:57

日期的处理是一个很常见的问题,Java中用来处理时间的有Date,DateFormat,Calendar这几个类。使用这几个类可以方便的获得一个时间对象、将时间对象以指定格式显示、将格式化的字符串解析为时间对象和对时间进行加减操作。

1.Date类
Date类对象代表的就是时间对象,准确的来说是从1970-01-01 0:0:0以来的毫秒数 ,这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。详见下面的代码:

package com.lkl.Study;import java.util.Date;public class DateTest {    public static void main(String[] args){        Date date = new Date();        System.out.println(date);//Thu Jul 28 20:55:05 CST 2016        //使用getTime方法取出的就是从1970-01-01 0:0:0以来的毫秒数,是一个长整型数        System.out.println(date.getTime());//1469710505555        //也可以long类型的数,构造一个时间对象        Date date1 = new Date(date.getTime()+10000000000L);        System.out.println(date1);//Mon Nov 21 14:46:43 CST 2016        System.out.println(date1.compareTo(date));//1,标示date1大于date        System.out.println(date1.after(date));//true    }}

其实Date对象原来是可以通过对应的set方法来设定其中的时间的(比如年,月,日等),但后面这些方法都被废除了,只剩下一些比较大小的方法可以使用。

2.DateFormat类
上面我们输出了Date类对象,可以看到输出的两种格式都不是很友好,那么我们能不能指定输出时间的格式呢。这时候就要用到DateFormat类及其子类了。
DateFormat类是一个抽象类,它有一个经常使用的子类SimpleDateFormat,这个类可以用来进行时间格式的转换。具体来说我们可以通过SimpleDateFormate对象将前面的date对象
以我们指定的时间格式输出,并且这个类还可以将以一定格式表示时间的字符串解析成时间对象。具体的用法见下面的代码:

public class DateTest {    public static void main(String[] args) throws Exception{        Date date = new Date();        //将date解析为指定格式的字符串        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");        System.out.println(format.format(date));//2016-08-01 07:15:34        //将表示时间的字符串解析为date对象        String txt = "2016-8-1 7:14:34";        date = format.parse(txt);        System.out.println(date.getTime());//1470006874000    }}

对于DateFormat来说比较重要的一点是什么格式是合法的,实际上DateFormat本身就有一套用于表示不同时间单位的字符,只要是我们使用这些字符组合成的格式,都是合法的。下面先给出具体的语法表示,然后通过代码来具体的说明这一点。
SimpleDateFormat函数语法:
G 年代标志符
y 年
d 日
H 时 在一天中 (0~23)
m 分
s 秒
E 星期
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
K 时 在上午或下午 (0~11)
z 时区

public class DateTest {    public static void main(String[] args) throws Exception{        Date date = new Date();        SimpleDateFormat format = new SimpleDateFormat("yyyy年的第w个星期,第D天,本月的第W个星期,k时,z时区");        System.out.println(format.format(date));//2016年的第32个星期,第214天,本月的第1个星期,19时,CST时区        SimpleDateFormat format1 = new SimpleDateFormat("yy年M月dd日 HH时mm分ss秒 E");        System.out.println(format1.format(date));//16年8月01日 19时46分21秒 星期一        //解析出错       // String txt = "16年8月01天 19时39分37秒 星期一";        //System.out.println(format1.parse(txt).getTime());        //对解析格式要求严格点        String txt = "2016/08/01 18:23:09";        SimpleDateFormat format2 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");        System.out.println(format2.parse(txt).getTime());//1470046989000    }}

可以看到对于将date解析成指定的格式字符串是非常自由的,我们基本可以随意指定;但是将字符串解析为date对象时,对格式的要求就要严格很多了,这时候就不允许再出现汉字了。

3.Calendar类
前面我们说过Date类中曾经有一些获取具体时间的方法(比如当前时间的小时、分钟等),但是这些方法目前都已经被废除了,为了进行这些操作我们就需要借助Calendar类了;除了上面说的这些操作外Calendar类还可以对时间进行加减操作和设定时间的具体部分(设定当前date对象的分钟、小时等),当然Calendar类是一个抽象类,我们使用到的是它的子类GregorianCalendar。具体的用法见下面的代码:

public class DateTest {    public static void main(String[] args) throws Exception {        Date date = new Date();        Calendar calendar = new GregorianCalendar();        //calendar.set(2016,8,1,20,07,23); 也可以使用这种方式来初始化一个Calendar对象        calendar.setTime(date);        //Calendar对象可以获取当前时间的指定部分,具体的时间段用Calendar中的常量表示        System.out.println(calendar.get(Calendar.HOUR)); //8        System.out.println(calendar.get(Calendar.MINUTE)); //22        //Calendar对象可以对时间进行加减操作,可以指定加减的单位         System.out.println(calendar.get(Calendar.MINUTE)); //22        calendar.add(Calendar.MINUTE, 20); //当前时间加20分钟        System.out.println(calendar.get(Calendar.MINUTE)); //42        calendar.add(Calendar.MINUTE, -30);//减30分钟        System.out.println(calendar.get(Calendar.MINUTE)); //12        //Calendar也可以将某个部分的时间设为指定值        calendar.set(Calendar.YEAR, 2017); //设为2017年        System.out.println(calendar.get(Calendar.YEAR));  //2017        //Calendar类还有可以取得当前是一年的第几天,一个月第几天,一天的第几个小时        System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //213        System.out.println(calendar.get(Calendar.DAY_OF_MONTH)); //1        System.out.println(calendar.get(Calendar.HOUR_OF_DAY)); //20    }}
1 0
原创粉丝点击