gpt4 book ai didi

java - 将 ISO8601 日期时间转换为另一种基于 Java 中的州名称的 ISO8601 格式?

转载 作者:行者123 更新时间:2023-11-29 04:05:57 24 4
gpt4 key购买 nike

作为 Java 方法的输入,我正在获取 ISO8601 日期时间格式的日期时间和州名(美国州名,如 TX、芝加哥等)。我需要将日期时间转换为本地日期时间到州名称。例如 - 2019-09-13T10:26:00-05:00 是我的日期时间值并将州名称设为 Los Angeles ,那么我必须将日期时间转换为 Los Angeles 日期时间。如何在 Java 中做到这一点?请帮忙

最佳答案

将您的输入字符串解析为 OffsetDateTime目的。 java.time 类默认解析标准 ISO 8601 中的字符串格式。

OffsetDateTime odt = OffsetDateTime.parse( "2019-09-13T10:26:00-05:00" ) ;

odt.toString(): 2019-09-13T10:26-05:00

要调整为 UTC,请应用 UTC 常量。

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

odtUtc.toString(): 2019-09-13T15:26Z

或者提取一个 Instant,因为 Instant 根据定义始终采用 UTC。

Instant instant = odt.toInstant() ;

instant.toString(): 2019-09-13T15:26:00Z

确定您的时区。时区的命名格式为Continent/Region

仅命名一个州(例如美国的蒙大拿州或加利福尼亚州)是不够的。整个州甚至可能不在同一时区。您需要在 official list of time zones 中看到的大洲和地区名称.

顺便说一句,“洛杉矶”是一座城市,而不是一个州。但这恰好是美国西海岸大部分地区使用的时区名称。嗯,实际上,正式的时区名称是“America/Los_Angeles”。

互联网上某处可能有一种资源可以维护城市到区域的映射,但我不知道有什么资源。如果您只期望一组特定的城市,您可以制作自己的 map 。

ZoneId z = ZoneId.of( "America/Los_Angeles" ) ; 

应用于 InstantOffsetDateTime 以获取 ZonedDateTime 对象。

ZonedDateTime zdt = instant.atZone( z ) ;

zdt.toString(): 2019-09-13T08:26-07:00[America/Los_Angeles]

查看此 code run live at IdeOne.com .

Table of date-time types in Java, both modern and legacy

关于java - 将 ISO8601 日期时间转换为另一种基于 Java 中的州名称的 ISO8601 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58660437/

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