Java /将ISO-8601(2010-12-16T13:33:50.513852Z)转换为Date对象

atl*_*erz 3 java iso date

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

javax.xml.bind.DatatypeConverter.parseDateTime("2010-12-16T13:33:50.513852Z")
Run Code Online (Sandbox Code Playgroud)

回报

IllegalArgumentException: '2010-12-16T13:33:50.513852Z' weist ein falsches Format auf.
Run Code Online (Sandbox Code Playgroud)

这意味着错误的格式,任何人都有一个线索在这里错在哪里?

Bas*_*que 5

TL;博士

Instant.parse( "2010-12-16T13:33:50.513852Z" )
Run Code Online (Sandbox Code Playgroud)

java.time

较新的java.time类可以处理此字符串输入.

Z对端是短期的Zulu和手段UTC,零偏移+00:00.

Instant

Instant级表示时间轴上的时刻UTC,分辨率为纳秒(最多9个(9)小数的位数).

Instant instant = Instant.parse( "2010-12-16T13:33:50.513852Z" );
Run Code Online (Sandbox Code Playgroud)

时区

您可能想要应用时区ZoneId来获取ZonedDateTime.搜索Stack Overflow以获取这些类名称以了解更多信息以及类OffsetDateTimeDateTimeFormatter.

转变

最好避免麻烦的旧遗产类java.util.Date.但是如果你坚持,请调用添加到旧类的新转换方法.

java.util.Date date = java.util.Date.from( instant );
Run Code Online (Sandbox Code Playgroud)

关于java.time

java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.

现在处于维护模式Joda-Time项目建议迁移到java.time类.

要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.

从哪里获取java.time类?

ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.