如何使用Java解析RFC 3339数据时间? [英] How do I parse RFC 3339 datetimes with Java?

查看:959
本文介绍了如何使用Java解析RFC 3339数据时间?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试从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

  • <分钟: mm
  • 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'

  • 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 using z and Z.)
  • time-offset: 'Z' (not supporting other time zones) - you should use format.setTimezone(TimeZone.getTimeZone("UTC")) before using this.)
  • partial-time: HH:mm:ss or HH:mm:ss.SSS.
  • full-time: HH:mm:ss'Z' or HH:mm:ss.SSS'Z'.
  • full-date: yyyy-MM-dd
  • date-time: yyyy-MM-dd'T'HH:mm:ss'Z' or yyyy-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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆