簡體   English   中英

根據 Java 中的 State 名稱將 ISO8601 日期時間轉換為另一種 ISO8601 格式?

[英]convert ISO8601 date time to another ISO8601 format based on State name in Java?

作為 Java 方法的輸入,我得到 ISO8601 日期時間格式的日期時間和 State 名稱(美國 state 名稱,如 TX、芝加哥等) 我需要將日期時間轉換為 State 名稱的本地日期時間。 例如 - 2019-09-13T10:26:00-05:00 是我的日期時間值,並獲得 state 名稱為洛杉磯,然后我必須將日期時間轉換為洛杉磯日期時間。 在Java中怎么做? 請幫忙

將您的輸入字符串解析為OffsetDateTime object。 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() ;

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

確定您的時區。 時區以Continent/Region的格式命名。

命名 state,例如在美國蒙大拿州或加利福尼亞州的 state,是不夠的。 整個州甚至可能不在同一個時區。 您需要官方時區列表中顯示的大陸和地區名稱。

順便說一句,“洛杉磯”是一個城市,而不是 state。 但這確實是美國西海岸大部分地區使用的時區名稱。 嗯,實際上,正式的時區名稱是“America/Los_Angeles”。

互聯網上的某個地方可能有一個資源可以維護城市到區域的映射,但我不知道。 如果您只期望一組特定的城市,您可以制作自己的地圖。

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

應用到InstantOffsetDateTime以獲得ZonedDateTime object。

ZonedDateTime zdt = instant.atZone( z ) ;

zdt.toString(): 2019-09-13T08:26-07:00[美國/洛杉磯]

請參閱在 IdeOne.com 上實時運行的代碼

Java 中的日期時間類型表,包括現代和傳統

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM