2 回答

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

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
另一種方法:
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
添加回答
舉報(bào)