Thinking in Java---使用Java处理日期和时间
2016-08-02 20:13
281 查看
日期的处理是一个很常见的问题,Java中用来处理时间的有Date,DateFormat,Calendar这几个类。使用这几个类可以方便的获得一个时间对象、将时间对象以指定格式显示、将格式化的字符串解析为时间对象和对时间进行加减操作。
1.Date类
Date类对象代表的就是时间对象,准确的来说是从1970-01-01 0:0:0以来的毫秒数 ,这个时间通常被称为Java 虚拟机(JVM)主机环境的系统时间。详见下面的代码:
其实Date对象原来是可以通过对应的set方法来设定其中的时间的(比如年,月,日等),但后面这些方法都被废除了,只剩下一些比较大小的方法可以使用。
2.DateFormat类
上面我们输出了Date类对象,可以看到输出的两种格式都不是很友好,那么我们能不能指定输出时间的格式呢。这时候就要用到DateFormat类及其子类了。
DateFormat类是一个抽象类,它有一个经常使用的子类SimpleDateFormat,这个类可以用来进行时间格式的转换。具体来说我们可以通过SimpleDateFormate对象将前面的date对象
以我们指定的时间格式输出,并且这个类还可以将以一定格式表示时间的字符串解析成时间对象。具体的用法见下面的代码:
对于DateFormat来说比较重要的一点是什么格式是合法的,实际上DateFormat本身就有一套用于表示不同时间单位的字符,只要是我们使用这些字符组合成的格式,都是合法的。下面先给出具体的语法表示,然后通过代码来具体的说明这一点。
SimpleDateFormat函数语法:
G 年代标志符
y 年
d 日
H 时 在一天中 (0~23)
m 分
s 秒
E 星期
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
K 时 在上午或下午 (0~11)
z 时区
可以看到对于将date解析成指定的格式字符串是非常自由的,我们基本可以随意指定;但是将字符串解析为date对象时,对格式的要求就要严格很多了,这时候就不允许再出现汉字了。
3.Calendar类
前面我们说过Date类中曾经有一些获取具体时间的方法(比如当前时间的小时、分钟等),但是这些方法目前都已经被废除了,为了进行这些操作我们就需要借助Calendar类了;除了上面说的这些操作外Calendar类还可以对时间进行加减操作和设定时间的具体部分(设定当前date对象的分钟、小时等),当然Calendar类是一个抽象类,我们使用到的是它的子类GregorianCalendar。具体的用法见下面的代码:
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 } }
相关文章推荐
- 【转】Java的时间处理(续<Java日期的创建和使用>)
- Java日期时间处理的简要使用方法
- Java 8中对日期和时间的处理(使用API处理)
- Java日期时间使用总结
- java的日期时间处理自定义类
- Java日期时间使用总结
- JAVA处理日期时间相加减
- 使用Date类处理日期时间
- Java中对时间、日期的处理
- Java日期时间处理
- JAVA面试题解惑系列(七)——日期和时间的处理
- Java处理日期,时间,以及日期时间的类
- Java基础:第十六讲 日期和时间的使用
- JAVA面试题解惑系列(七)――日期和时间的处理
- java中日期和时间的处理
- 浅谈JAVA时间日期处理函数
- JAVA中的日期时间处理问题
- Java日期时间使用总结
- JAVA处理日期时间常用方法: java.util.Calendar
- java处理日期时间 相加减