繁体   English   中英

将字符串转换为 UTC 中的 ZonedDateTime

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM