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
添加回答
举报