Java /将ISO-8601(2010-12-16T13:33:50.513852Z)转换为Date对象
如何用祖鲁时间parsingISO 8601格式的string?
javax.xml.bind.DatatypeConverter.parseDateTime("2010-12-16T13:33:50.513852Z")
回报
IllegalArgumentException: '2010-12-16T13:33:50.513852Z' weist ein falsches Format auf.
这意味着什么格式错误,任何人都有线索什么错在这里?
它适用于我尝试在线
输出是:
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]
TL;博士
Instant.parse( "2010-12-16T13:33:50.513852Z" )
java.time
较新的java.time类可以处理这个stringinput。
Z
最后是Zulu
缩写,意思是UTC ,零点+00:00
的偏移量。
Instant
Instant
类表示UTC时间轴上的一个时刻,分辨率为纳秒 (最多九(9)位小数)。
Instant instant = Instant.parse( "2010-12-16T13:33:50.513852Z" );
时区
您可能需要应用时区ZoneId
以获取ZonedDateTime
。 search堆栈溢出,以了解更多的类名,以及OffsetDateTime
和DateTimeFormatter
类。
转变
最好避免使用java.util.Date
旧式遗留类。 但是如果坚持,就把新的转换方法称为旧类。
java.util.Date date = java.util.Date.from( instant );
关于java.time
java.time框架内置于Java 8及更高版本中。 这些类取代了麻烦的旧的遗留date时间类,如java.util.Date
, Calendar
和SimpleDateFormat
。
Joda-Time项目现在处于维护模式 ,build议迁移到java.time类。
要了解更多信息,请参阅Oracle教程 。 并search堆栈溢出了很多例子和解释。 规范是JSR 310 。
从何处获取java.time类?
- Java SE 8和SE 9及更高版本
- 内置。
- 带有捆绑实现的标准Java API的一部分。
- Java 9增加了一些小function和修复。
- Java SE 6和SE 7
- 大部分的java.timefunction都被移植到了ThreeTen-Backport中的 Java 6&7中。
- Android的
- ThreeTenABP项目专门针对Android,采用了ThreeTen-Backport (上文提到)。
- 请参阅如何使用ThreeTenABP …。
ThreeTen-Extra项目将java.time扩展到其他类。 这个项目是未来可能增加java.time的一个试验场。 你可能会在这里find一些有用的类,比如Interval
, YearWeek
, YearQuarter
等等 。
你发布的代码在我的工作很好。 可能你定义了你自己的DatatypeConverter(与德国的exception文本…!),这个特定的DatatypeConverter不能parsing这个date。
做这个代码的代码search: DatatypeConverter.setDatatypeConverter(
– 你可能会发现你的“DatatypeConverterInterface”的自定义实现 – 这可能会导致你的bug。
或者,您可以searchweist ein falsches Format auf.
(因为那个exception文本不是jre的一部分)
Viel Erfolg;)