如何解决如何使用 Instant Java 类解析具有 UTC 偏移量的日期时间?
我正在尝试使用具有时区偏移量的 Instant.parse() 解析日期时间。我阅读了文档,它说我必须使用 ISO-8601 来做到这一点。我阅读了维基百科的 ISO-8601 文章,并从那里复制了这个日期时间“2007-11-03T13:18:05-03:00”,并将它与 parse() 方法一起使用。调用抛出异常,表示无法解析参数。我不明白为什么会这样。有人可以帮我吗?
解决方法
tl;博士
OffsetDateTime
.parse(
"2007-11-03T13:18:05-03:00"
)
.toInstant()
.toString()
详情
字符串 -03:00
末尾的 "2007-11-03T13:18:05-03:00"
表示比 UTC 晚三个小时的偏移量。
Instant
类表示在 UTC 时间看到的时刻,偏移量为零时-分-秒。
改用 OffsetDateTime
类。
OffsetDateTime odt = OffsetDateTime.parse( "2007-11-03T13:18:05-03:00" ) ;
要调整为零的偏移量,请提取一个 Instant
。
Instant instant = odt.toInstant() ;
要生成带有标准 ISO 8601 格式文本的字符串,请调用 toString()
。
String output = instant.toString() ;
对于带有时区而不仅仅是偏移量的日期时间值,请使用 ZonedDateTime
类。
仅对于日期和时间但缺少偏移量或区域的上下文,请使用 LocalDateTime
。
编辑:正如@Tom 在评论中指出的,从 Java 12 开始,我们可以简单地做:
System.out.println(Instant.parse("2007-11-03T13:18:05-03:00"));
输出为:
2007-11-03T16:18:05Z
原始答案:另一个选项(Java 版本高达 11)是:
Instant yourInstant = DateTimeFormatter.ISO_OFFSET_DATE_TIME
.parse("2007-11-03T13:18:05-03:00",Instant::from);
System.out.println(yourInstant);
输出和上面一样。
更喜欢哪个?我认为这是一个品味问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。