3

我在格式化以下日期/时间时遇到问题:

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

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

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

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

我怎样才能在java中解析这个?(也许使用 JodaTime)。

4

4 回答 4

1

尝试使用这种模式:

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

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

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

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

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

您也可以尝试DatatypeConverter.parseDateTimewhich 返回一个java.util.Calendar对象。

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

上面的语句执行没有任何错误。

于 2013-03-14T20:59:03.757 回答
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);

点 () 后面的数字是DateTimeFormat.中表示的秒数。表示时区模式。SJodaTime's Z

于 2013-03-14T21:10:14.400 回答
0

您的时间字符串的格式是 ISO8601 格式。JodaTime 类ISODateTimeFormat将直接支持该格式。但是,您将失去任何超过毫秒的精度。

String time = "2013-01-10T17:04:24.3787635-02:00";
DateTime dateTime = ISODateTimeFormat.dateTime().parseDateTime(time);
于 2013-03-14T21:08:54.220 回答
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();
于 2013-03-14T21:13:17.610 回答