2 回答

TA貢獻1770條經驗 獲得超3個贊
你在做什么是正確的。要獲取您當地時區的時間:
DateTime date = new DateTime("2019-02-16T10:00:00+08:00");
DateTime dateTimeInLocalTimeZone = date.withZone(DateTimeZone.getDefault());
System.out.println(dateTimeInLocalTimeZone);
在我在歐洲/哥本哈根時區的電腦上,我得到了
2019-02-16T03:00:00.000+01:00
正如評論中所說,與UTC時間相比已經添加+08:00了偏移量。因此,您的字符串表示的時間點與. 它也可以寫成因為(發音為“Zulu”)表示 UTC。2019-02-16T02:00:00+00:002019-02-16T02:00:00ZZ
java.time 和 ThreeTen Backport
如果您還沒有綁定到 Joda-Time,您可能更喜歡使用 java.time,這是現代 Java 日期和時間 API。代碼類似:
OffsetDateTime sourceDateTime = OffsetDateTime.parse("2019-02-16T10:00:00+08:00");
ZonedDateTime dateTimeInLocalTimeZone = sourceDateTime.atZoneSameInstant(ZoneId.systemDefault());
2019-02-16T03:00+01:00[歐洲/哥本哈根]
問:我可以在 Java 1.7 上使用 java.time 嗎?
注意:我使用的是 Java 1.7
沒什么大問題, java.time 至少需要Java 6。我已經在 jdk1.7.0_79 上運行了上面的代碼。
在 Java 8 及更高版本以及更新的 Android 設備(從 API 級別 26 開始)中,現代 API 是內置的。
在 Java 6 和 7 中獲得 ThreeTen Backport,現代類的后向端口(ThreeTen 用于 JSR 310;請參閱底部的鏈接)。
在(較舊的)Android 上使用 ThreeTen Backport 的 Android 版本。它被稱為 ThreeTenABP。并確保從org.threeten.bp子包中導入日期和時間類。

TA貢獻1828條經驗 獲得超3個贊
另一種方法:
String dt = "2019-02-16T10:00:00+08:00";
ZonedDateTime zd = ZonedDateTime.parse("2019-02-16T10:00:00+08:00");
System.out.println(zd.toLocalDateTime().plusSeconds(zd.getOffset().getTotalSeconds()));
輸出
2019-02-16T18:00
添加回答
舉報