Java自学之路:日期和时间处理(2) 之 格式转换

上一篇《Java自学之路:日期和时间处理(1) 之 数据库的日期和时间处理》说了数据库里的日期时间格式处理,下面再来说说日期格式的转换吧。

首先我们有了一个时间对象,假设是:

java.util.Date d = new Date();

如果我们直接使用 toString方法并打印出来:

System.out.println(d.toString());

一般会是如下格式输出:

Wed Jul 29 13:21:10 CST 2015

那么,我们想要输出为自定义的格式怎么办呢?如“2015年7月29日 13时21分10秒”或“07.29.2015 13.21.10”。

这时需要使用java.text.SimpleDateFormat这个类了,这个类的API文档挺长,有兴趣的小伙伴可以读一读,其实要实现上述的格式,主要使用的方法就是format方法,再者就是API文档后面附的格式字母表啦,代码如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss", Locale.US);
System.out.println(sdf.format(d));
  1. 构造函数的第一个参数”yyyy.MM.dd HH:mm:ss”就是自定义的格式,该例是“年.月.日 时:分:秒”
  2. 构造函数的第二个参数 Locale.US,这是个表示地区习惯的参数,可以省略。Locale是 java.util.Locale 的对象,US是常量,常量还有CHINA等,这个是控制显示比如“AM”还是“上午”的。
  3. 将Date d使用SimpleDateFormat sdf的format方法进行格式化并输出,最后显示为:如“2015.07.29. 13.21:10”。
  4. 值得注意的是,使用format方法返回的数据类型是String。

那么,如何显示为“2015.07.29 上午01:21:10”呢?小伙伴们可以摸索下,下面是代码:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd ahh:mm:ss", Locale.CHINA);
System.out.println(sdf.format(d));

Date按照指定的格式输出就说完了,下面在来说说如何将指定的String装换成Date对象,如“2015-07-29 13::21:10”装换成一个Date对象。

先有一个String,如下:

String dStr = "2015-07-29 13:21:10";

现在要用到的类还是java.text.SimpleDateFormat,但是使用的方法变成了parse方法,代码如下:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(dStr);  // throws ParseException;
  1. 构造函数参数就是需要转换的String的格式了
  2. parse方法在无法转换的时候会抛出ParseException异常,需要catch

那么关于日期格式和字符串的转换也就说完了,其他还有一些细节,如日期时间如何显示单个数字,如07显示为7,或者还想显示时区等,小伙伴们就慢慢研究下API文档的字母表吧,很容易理解的,下面附上字母表:

SimpleDateFormat日期格式字母对照表

SimpleDateFormat日期格式字母对照表

另外,值得注意,而且我也没搞明白的是:使用parse将String转换成Date对象时,如果输入的格式是“2015.07.29 下午1:21:10”或者“2015.07.29 PM1:21:10”(也就是12小时格式),都会被解析成上午的时间,也就是2015.07.29 上午1:21:10,不知道为什么,所以还是避免使用12小时格式的String来转换成Date吧!

本文《Java自学之路:日期和时间处理(2) 之 格式转换》来自 www.juwends.com ,欢迎转载或CV操作,但请注明出处,谢谢!