gpt4 book ai didi

java - 从 JSON 字符串确定时区?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:20 25 4
gpt4 key购买 nike

我正在查询返回如下内容的 JSON API:

{
"created_time": "2017-01-05T16:32:29+0100",
"updated_time": "2017-01-11T09:38:41+0100",
"id": "23842536731240607"
}

我需要以 UTC 格式存储时间,但为了更改时区,我首先需要将其解析为 ZonedDateTime

"+0100" 转换为 "+01:00" 很容易。但是我如何将(创建/更新)_time 解析为 ZonedDateTime 以便将其转换为 UTC?

最佳答案

有一些选项。

首先,如您所说,在区域偏移中插入冒号并不难。完成之后,获取 ZonedDateTime 就很简单了:

    ZonedDateTime zdt = ZonedDateTime.parse("2017-01-11T09:38:41+01:00");
System.out.println(zdt);

这打印:

2017-01-11T09:38:41+01:00

另外,有趣的是,虽然 ZonedDateTime.parse(String) 需要在偏移量中使用冒号,但 ZoneId.of() 不需要,因此您可以拆分偏移量并做:

    ZoneId zi = ZoneId.of("+0100");
LocalDateTime ldt = LocalDateTime.parse("2017-01-11T09:38:41");
ZonedDateTime zdt = ldt.atZone(zi);

结果和之前一样。

如果您不想在解析之前修改您的字符串,还有:

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
ZonedDateTime zdt = ZonedDateTime.parse("2017-01-11T09:38:41+0100", dtf);

这也给出了相同的结果。

编辑:注意:我正在使用 ZonedDateTime 因为你在你的问题中要求这样做。您可能认为使用 OffsetDateTime 更正确。大多数代码实际上是相同的。拆分偏移量的版本如下所示:

    ZoneOffset zo = ZoneOffset.of("+0100");
LocalDateTime ldt = LocalDateTime.parse("2017-01-11T09:38:41");
OffsetDateTime odt = ldt.atOffset(zo);

要转换为 UTC,如问题末尾所述,应用另一个 ZoneOffset,常量 ZoneOffset.UTC

OffsetDateTime odtUtc = odt.withOffsetSameInstant( ZoneOffset.UTC );

关于java - 从 JSON 字符串确定时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com