DateTime(“2019-02-16T10:00:00 + 08:00”)使用偏移值转换为本地日期时间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DateTime(“2019-02-16T10:00:00 + 08:00”)使用偏移值转换为本地日期时间相关的知识,希望对你有一定的参考价值。

我使用以下字符串格式获取日期时间内容,并使用源系统的偏移时间值。

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

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

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

- >输出== 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

答案

你在做什么是正确的。要在当地时区获得时间:

    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

正如在评论中所说,+08:00是与UTC时间相比已经添加的偏移量。所以你的字符串表示与2019-02-16T02:00:00+00:00相同的时间点。它也可以写成2019-02-16T02:00:00Z,因为Z(发音为“Zulu”)表示UTC。

java.time和ThreeTen Backport

如果您还没有与Joda-Time绑定,您可能更喜欢使用现代Java日期和时间API java.time。代码类似:

    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,现代类的后端(JST 310的ThreeTen;请参见底部的链接)。
  • 在(较旧的)Android上使用Android版的ThreeTen Backport。它被称为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

以上是关于DateTime(“2019-02-16T10:00:00 + 08:00”)使用偏移值转换为本地日期时间的主要内容,如果未能解决你的问题,请参考以下文章

python datetime.datetime 时间转换

为啥 object dtype 数组包含 datetime.datetime 对象而不是 numpy.datetime64 对象?

pd.datetime( )和pd.to_datetime( )

Python模块---datetime

TypeError:“datetime.datetime”对象的描述符“date”不适用于“datetime.date”对象

在 datetime、Timestamp 和 datetime64 之间转换