如何解决在UTC
我有一个String
,其中包含ZonedDateTime
-UTC格式的日期。示例:-
2020-08-21T02:05:45.231Z
我想将其转换为ZonedDateTime
类型的变量。格式化程序上的模式应该是什么?
(请注意以“ Z”结尾的时间表示UTC)
解决方法
由于此示例String
为ISO格式,带有有效的时区缩写,因此您可以直接解析它而不传递模式。
就像这样:
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.parse("2020-08-21T02:05:45.231Z");
System.out.println(zdt);
}
然后,输出再次是ISO格式的String
2020-08-21T02:05:45.231Z
请注意,此处应首选OffsetDateTime
,因为UTC不是实时时区,它是世界协调时间,该时间不包含偏移量。
代码只是稍有不同:
public static void main(String[] args) {
OffsetDateTime odt = OffsetDateTime.parse("2020-08-21T02:05:45.231Z");
System.out.println(odt);
}
具有完全相同的输出。
为了完整起见,这是将示例String
解析为Instant
的方法:
public static void main(String[] args) {
Instant instant = Instant.parse("2020-08-21T02:05:45.231Z");
System.out.println(instant.toEpochMilli());
}
这次,输出是相同的时刻,以纪元毫秒(从1970-01-01'T'00:00:00.000...
起的毫秒数)表示:
1597975545231
,
您也可以使用DateTimeFormatter.ISO_ZONED_DATE_TIME
。
jshell> DateTimeFormatter.ISO_ZONED_DATE_TIME.parse("2020-08-21T02:05:45.231Z")
=> {InstantSeconds=1597975545,OffsetSeconds=0},ISO resolved to 2020-08-21T02:05:45.231
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。