3

如何使用 Zulu 时间解析ISO 8601格式的字符串?

javax.xml.bind.DatatypeConverter.parseDateTime("2010-12-16T13:33:50.513852Z")

返回

IllegalArgumentException: '2010-12-16T13:33:50.513852Z' weist ein falsches Format auf.

这意味着格式错误,有人知道这里有什么问题吗?

4

4 回答 4

7
于 2016-10-17T05:13:40.417 回答
1

它适用于我在线尝试 ide

输出是:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+00:00",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=11,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=16,DAY_OF_YEAR=1,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=13,MINUTE=33,SECOND=50,MILLISECOND=513,ZONE_OFFSET=0,DST_OFFSET=0]
于 2010-12-24T10:56:12.440 回答
1

如果目标数据类型是“ ZonedDateTime ”,您可以使用日期格式化程序“yyyy-MM-dd'T'HH:mm:ss.SSSSSSX”。示例代码如下:

    public ZonedDateTime convertStringToZonedDateTime() {
       String inputString = "2010-12-16T13:33:50.513852Z";
       DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSX");
       ZonedDateTime zdt = ZonedDateTime.parse(inputString, formatter);
       return zdt; //Output ZonedDateTime object is 2010-12-16T13:33:50.513852Z
}

注意力!如果输入日期字符串的秒和毫秒为 0,例如“2010-12-16T13:00:00.000000Z”,则输出 ZonedDateTime 对象为“2010-12-16T13:00Z”,即使看起来奇怪的是没有秒和毫秒,它仍然是一个合法的 ZonedDateTime。

如果目标数据类型是“即时”:

    public Instant convertStringToInstant() {
       String inputString = "2010-12-16T13:33:50.513852Z";
       Instant instant = Instant.parse(inputString);
       return instant; //Output Instant object is 2010-12-16T13:33:50.513852Z
}
于 2020-07-12T17:16:09.827 回答
0

您发布的代码在我的 jre 中运行良好。可能您定义了自己的 DatatypeConverter (带有德语异常文本......!)并且这个特定的 DatatypeConverter 无法解析这个日期。

对此代码进行代码搜索:DatatypeConverter.setDatatypeConverter(- 在那里您可能会找到“DatatypeConverterInterface”的自定义实现 - 然后可能会导致您的错误。

或者,您可以搜索weist ein falsches Format auf.(因为异常文本不是 jre 的一部分)

维尔·埃尔福格 ;)

于 2010-12-24T11:07:22.877 回答