iso 8601 时间格式 java_在Java中解析ISO 8601日期格式,如2015-06-27T13:16:37.363Z

跳过格式化模式。默认使用标准ISO 8601格式。

Instant.parse( "2015-06-27T13:16:37.363Z" )

ISO 8601

您的字符串格式由ISO 8601标准正式定义。

基本上你的问题是这个问题的重复,将符合ISO 8601标准的字符串转换为java.util.Date。

备择方案

答案由eugenioy是正确的。

但是你应该知道与Java捆绑在一起的旧的java.util.Date/.Calendar/java.text.SimpleDateFormat类是非常麻烦的,应该避免。

过时的课程

这些旧类现在已经过时了,首先是第三方Joda-Time库,现在是Java 8及更高版本中内置的新java.time包(教程)(受Joda-Time启发,由JSR 310定义,扩展为在ThreeTen-EXTRA项目)。

在解析/生成日期时间值的字符串表示时,java.time和Joda-Time都使用ISO 8601标准作为其默认值。因此代码很简单,不需要自定义格式化程序对象。不需要那些导致你的例外的格式错误。

时区

java.time和Joda-Time都有一个分区的日期时间类,它可以理解分配的时区(与java.util.Date不同)。如果未指定一个,则分配JVM的当前默认时区。

要注意的是JVM的当前默认时区可以更改在任何时间。它可以在部署时更改,默认为主机操作系统设置。当JVM中任何应用程序的任何线程中的任何代码调用时,它可以在运行时期间随时更改TimeZone.setDefault。因此,最好明确指定期望/预期的时区。

java.time

在Z对祖鲁你的字符串的结尾很短,是指UTC。本Instant类,可直接解析该格式,以表示UTC时间线,在纳秒的分辨率上一会儿。

String input = "2015-06-27T13:16:37.363Z";

Instant instant = Instant.parse( input );

将时区从UTC更改为某个所需/预期时区。

ZoneID zone = ZoneId.of( "America/Montreal" ) ;

ZonedDateTime zdtMontréal = instant.atZone( zone ) ;

如果您确实需要java.util.Date来实现互操作性,请转换。

java.util.Date utilDate = Date.from( zdtMontréal.toInstant() ) ;

乔达时间

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

请注意,从Java SE 8开始,用户被要求迁移到java.time(JSR-310) - JDK的核心部分,它取代了这个项目。

使用Joda-Time 2.8.1的示例代码。

String input = "2015-06-27T13:16:37.363Z" ;

DateTimeZone zone = DateTimeZone.UTC ;  //  Or: DateTimeZone.forID( "America/Montreal" ) ;

DateTime dateTime = new DateTime( input, zone ) ;

如果您确实需要java.util.Date来实现互操作性,请转换。

java.util.Date date = dateTime.toDate();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值