Java 解析 RFC3339 日期
目录
最近在写一个简单的 Atom 解析类,需要解析其中使用的 RFC3339 规定的日期,碰到了几个小问题,发现这个功能还是需要特别注意一下。
RFC3339 定义的日期格式大体是:年-月-日T时-分-秒时区(其中,T 就只是字母 T)。示例为:2010-01-01T01:01:01+01:00
这里使用 SimpleDateFormat
来解析数据,具体细节要注意:
- 可能日期没有时区定义,即结尾使用单个大写字母 Z
- 时间的秒对应数字可能有小数
正常的解析模式应该是 yyyy-MM-dd'T'HH:mm:ssX
,结合上面的讨论还有 3 种情况需要解析:
yyyy-MM-dd'T'HH:mm:ss.SSSX
:秒数有小数yyyy-MM-dd'T'HH:mm:ss'Z'
:无时区yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
:无时区,且秒数有小数
相应的示例代码为:
|
|
目前个人测试的数据都可以正常解析,即使出现了不可解析的模式也不难扩展,只要加入新的模式字符串到 patterns
里即可。
Android 编程特别注意:
Android 目前的 SimpleDateFormat 格式中默认不支持 X 模式,可以使用 ZZZZZ 代替,相应的 patterns
为:
|
|
参考: https://tools.ietf.org/html/rfc3339 http://stackoverflow.com/questions/28373610/android-parse-string-to-date-unknown-pattern-character-x