格式化特定日期/时间格式时出现问题

时间:2013-03-14 20:54:33

标签: java parsing date time

我在格式化以下日期/时间时出现问题:

2013-01-10T17:04:24.3787635-02:00

现在,我理解2013-01-10是日期(显然)。

17:04:24.3787635可能是时间,虽然我不知道点后面的数字是什么意思。

-02:00我认为这是时区(GMT)。

我如何在java中解析这个? (也许使用JodaTime)。

4 个答案:

答案 0 :(得分:1)

尝试使用此模式:

"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"

可以用这种格式解析日期:

2001-07-04T12:08:56.235-07:00

虽然源字符串中的3787635很麻烦。它看起来不像毫秒。

有关模式的更多详细信息,请查看java.text.SimpleDateFormat

您还可以尝试返回java.util.Calendar对象的DatatypeConverter.parseDateTime

DatatypeConverter.parseDateTime("2013-01-10T17:04:24.3787635-02:00").getTime()

上述语句执行时没有任何错误。

答案 1 :(得分:1)

您可以使用JodaTime来解析此日期:

String time = "2013-01-10T17:04:24.3787635-02:00";
DateTimeFormatter df = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
DateTime dateTime = df.parseDateTime(time);

点(.)后面的数字是S DateTimeFormatJodaTime's表示的秒数。 Z代表时区模式。

答案 2 :(得分:0)

时间字符串的格式为ISO8601格式。 JodaTime类ISODateTimeFormat将直接支持该格式。但是,你将失去超过毫秒的准确度。

String time = "2013-01-10T17:04:24.3787635-02:00";
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(time);

答案 3 :(得分:0)

只能使用javax.xml.XMLGregorianCalendar正确解析此格式。你不能使用SimpleDateFormat,因为它接受SSS作为毫秒数,而不是一秒的小数部分。

    String s = "2013-01-10T17:04:24.3787635-02:00";
    DatatypeFactory dtf = DatatypeFactory.newInstance();
    Date date = dtf.newXMLGregorianCalendar(s).toGregorianCalendar().getTime();