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
导入子包的日期和时间类。
链接
- Oracle tutorial: Date Time解释如何使用java.time。
- Java Specification Request (JSR) 310,
java.time
首次被描述。 - ThreeTen Backport project,
java.time
的后端到Java 6和7(JST-310的ThreeTen)。 - ThreeTenABP,Android版ThreeTen Backport
- Question: How to use ThreeTenABP in Android Project,有一个非常彻底的解释。
另一种方法:
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”)使用偏移值转换为本地日期时间的主要内容,如果未能解决你的问题,请参考以下文章
为啥 object dtype 数组包含 datetime.datetime 对象而不是 numpy.datetime64 对象?
pd.datetime( )和pd.to_datetime( )
TypeError:“datetime.datetime”对象的描述符“date”不适用于“datetime.date”对象