SimpleDateFormat Joda-Time Apache-DateUtils 解析ISO8601日期字符串的异同

废话少说,直接上代码:

导入部分:

1 1 import java.util.Date;
2 2 import java.text.SimpleDateFormat;
3 3 import org.apache.commons.lang3.time.DateUtils;
4 4 import org.joda.time.DateTime;
5 5 import org.joda.time.format.DateTimeFormat;
View Code

 转换部分

 1 String datestr1 = "2016-06-07T14:08:09.235+08:00";  //ISO8601
 2 String datestr2 = "2016-06-07 14:08:09";        //Without Millis
 3 String datestr3 = "2016-06-07 14:08:09.235";      //With Millis
 4 
 5 //Joda Time
 6 Date date0 = new DateTime(datestr1).toDate();
 7 Date date1 = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZ").parseDateTime(datestr1).toDate();
 8 Date date2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime(datestr2).toDate();
 9 Date date3 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS").parseDateTime(datestr3).toDate();
10 
11 //JDK
12 date1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").parse(datestr1);    //XXX means Timezone for Java SimpleDateFormat
13 date2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datestr2);
14 date3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").parse(datestr3);
15 
16 //Apache
17 date1 = DateUtils.parseDate(datestr1, "yyyy-MM-dd'T'HH:mm:ss.SSSZZ");
18 date2 = DateUtils.parseDate(datestr2, "yyyy-MM-dd HH:mm:ss");
19 date3 = DateUtils.parseDate(datestr3, "yyyy-MM-dd HH:mm:ss.SSS");
View Code

测试中使用了三种常见格式的日期字符串,其中包括Json转换默认的ISO8601格式。经测试SimpleDateFormat Joda-Time Apache-DateUtils三种方式都能实现对这三种日期格式的解析,其中:

1. SimpleDateFormat 解析ISO8601的格式串为 "yyyy-MM-dd'T'HH:mm:ss.SSSXXX",其中XXX表示时区,与通用的ZZ不一样。

2. Joda-Time 默认格式就是ISO8601,故可以直接用 new DateTime(...) 的方式直接解析ISO8601日期串,当然也可以用日期格式串来解析,用日期格式串解析日期的代码略长。

3. Apache-DateUtils  解析ISO8601的格式串和Joda一样是 "yyyy-MM-dd'T'HH:mm:ss.SSSZZ",解析代码相对Joda-Time更简洁。

吐槽一下:SimpleDateFormat用XXX来表示时区真是太变态了,浪费我半天时间才搞定,特此记录。

posted on 2016-06-07 14:52 飘的移 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/harryzhang/p/SimpleDateFormat_ISO8601_FormatString.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值