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 }}
- Thinking in Java---使用Java处理日期和时间
- Thinking in Java : 异常处理
- Java日期时间处理
- Java日期时间处理
- java日期时间处理
- java时间日期处理
- java日期时间处理
- Java日期时间处理
- java 时间日期处理
- java处理日期时间
- Java日期时间处理
- JAVA日期时间处理
- Java日期时间处理
- Java日期时间处理
- java处理日期时间
- java处理日期时间
- Java日期时间处理
- java中的日期和时间处理示例
- 虚拟机VmWare打开报错,错误提示:VMware Authorization Service is not running!
- 大数据Spark “蘑菇云”行动前传第14课Scala集合上的函数式编程实战及Spark源码鉴赏
- 大二暑期 机器学习 梯度下降,基于theano的MLP和keras的调参数代码
- 切换页面的时候出现一个页面闪一下,回到原来的界面
- linux获取音频及播放代码实例
- Thinking in Java---使用Java处理日期和时间
- 如何获取prezi免费使用权
- springmvc方法中不能同时出现request和session
- JAVA启动停止Tomcat服务
- 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
- Struts2 Web 资源获取的四种方式
- 基数排序C/C++
- 重新抛出异常——fillInStackTrace()
- HDU 5724 Chess(SG博弈 + 状压)