[英]Convert a String to ZonedDateTime in UTC
我有一个String
,其中包含ZonedDateTime
- UTC 格式的日期。 例子:-
2020-08-21T02:05:45.231Z
我想将其转换为ZonedDateTime
类型的变量。 格式化程序上的模式应该是什么?
(注意以“Z”结尾的时间,表示UTC)
由于此示例String
采用 ISO 格式并具有有效的时区缩写,因此您可以直接解析它而无需传递 pattern 。
像这样:
public static void main(String[] args) {
ZonedDateTime zdt = ZonedDateTime.parse("2020-08-21T02:05:45.231Z");
System.out.println(zdt);
}
output 然后(再次)是 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);
}
与完全相同的 output。
为了完整起见,这是将示例String
解析为Instant
的方法:
public static void main(String[] args) {
Instant instant = Instant.parse("2020-08-21T02:05:45.231Z");
System.out.println(instant.toEpochMilli());
}
这一次,output 是用纪元毫秒表示的同一时刻(自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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.