为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ibeautiful 2022-07-14 17:22:13
我从源系统获取带有偏移时间值的以下字符串格式的日期时间内容。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
查看完整描述

2 回答

?
德玛西亚99

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子包中导入日期和时间类。


查看完整回答
反对 回复 2022-07-14
?
子衿沉夜

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


查看完整回答
反对 回复 2022-07-14
  • 2 回答
  • 0 关注
  • 128 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信