如何使用Java解析RFC 3339数据时间? [英] How do I parse RFC 3339 datetimes with Java?
问题描述
我正在尝试从HTML5 datetime
输入字段中解析作为值返回的日期。在Opera中试试看一个例子。返回的日期如下所示: 2011-05-03T11:58:01Z
。
I'm trying to parse the date returned as a value from the HTML5 datetime
input field. Try it in Opera to see an example. The date returned looks like this: 2011-05-03T11:58:01Z
.
我想解析成Java日期或日历对象。
I'd like to parse that into a Java Date or Calendar Object.
理想情况下,解决方案应该具有以下几点:
Ideally a solution should have the following things:
- 没有外部库(jars)
- 处理所有可接受的RFC 3339格式
- 字符串应该能够轻松验证看看它是否是一个有效的RFC 3339日期
推荐答案
原则上这将完成使用不同的 SimpleDateFormat 模式。
So, in principle this would be done using different SimpleDateFormat patterns.
这里列出了 RFC 3339中的个人声明:
- date-fullyear:
yyyy
- date-month:
MM
- date-mday:
dd
- time-hour:
HH
- time-second:
ss
- time-secfrac:
.SSS
(S
表示毫秒,但是 - 不清楚如果这些数字多于或少于3位数,则会发生。) - time-numoffset :(像
+02:00
似乎不支持 - 而是支持格式+0200
,GMT + 02:00
和某些命名时区使用z
和Z
。) - time-offset:
'Z'
(不支持其他时区) - 您应该使用format.setTimezone(TimeZone.getTimeZone(UTC))
使用这个。) - 部分时间:
HH:mm:ss
或HH:mm:ss。 SSS
。 - 全职:
HH:mm:ss'Z'
或HH:mm:ss.SSS'Z'
。 - 全日期:
yyyy-MM-dd
- 日期时间:
yyyy-MM-dd'THH:mm:ss'Z'
或yyyy-MM-dd'T'HH:mm:ss。 SSS'Z'
<分钟:
mm
- date-fullyear:
yyyy
- date-month:
MM
- date-mday:
dd
- time-hour:
HH
- time -minute:
mm
- time-second:
ss
- time-secfrac:
.SSS
(S
means millisecond, though - it is not clear what would happen if there are more or less than 3 digits of these.) - time-numoffset: (like
+02:00
seems to be not supported - instead it supports the formats+0200
,GMT+02:00
and some named time zones usingz
andZ
.) - time-offset:
'Z'
(not supporting other time zones) - you should useformat.setTimezone(TimeZone.getTimeZone("UTC"))
before using this.) - partial-time:
HH:mm:ss
orHH:mm:ss.SSS
. - full-time:
HH:mm:ss'Z'
orHH:mm:ss.SSS'Z'
. - full-date:
yyyy-MM-dd
- date-time:
yyyy-MM-dd'T'HH:mm:ss'Z'
oryyyy-MM-dd'T'HH:mm:ss.SSS'Z'
我们可以看到,这似乎无法解析一切。也许从头开始实现一个 RFC3339DateFormat
是一个更好的方法(使用正则表达式,为了简单起见,或手工解析,以提高效率)。
As we can see, this seems not to be able to parse everything. Maybe it would be a better idea to implement an RFC3339DateFormat
from scratch (using regular expressions, for simplicity, or parsing by hand, for efficiency).
这篇关于如何使用Java解析RFC 3339数据时间?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!