![](/img/trans.png)
[英]Convert ISO8601 date time format to another ISO8601 date time format
[英]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" ) ;
應用到Instant
或OffsetDateTime
以獲得ZonedDateTime
object。
ZonedDateTime zdt = instant.atZone( z ) ;
zdt.toString(): 2019-09-13T08:26-07:00[美國/洛杉磯]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.