DateTime 转换为具有偏移值的本地日期时间

我从源系统获取带有偏移时间值的以下字符串格式的日期时间内容。

2019-02-16T10:00:00+08:00

我想使用偏移值将其转换为本地日期时间。我尝试了以下方法,但没有得到预期的结果。

DateTime date = new DateTime("2019-02-16T10:00:00+08:00");

-->output == 2019-02-16T02:00:00.000Z(小时减少而不是增加)

DateTime date = new DateTime("2019-02-16T10:00:00-08:00");

-->output == 2019-02-16T18:00:00.000Z(小时增加而不是减少)。

有什么简单的方法可以达到预期的输出吗?注意:我使用的是 Java 1.7


ibeautiful
浏览 131回答 2
2回答

德玛西亚99

你在做什么是正确的。要获取您当地时区的时间:    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:00ZZjava.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子包中导入日期和时间类。

子衿沉夜

另一种方法: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java