日历中的toInstant()以GMT而非本地时间显示

时间:2015-10-30 11:59:19

标签: java date datetime calendar

我正在尝试将Calendar实例转换为即时实例,我按照以下方式执行此操作

s1

并且,它的输出如下

  

10月30日星期五17:23:40 IST 2015

     

2015-10-30T11:53:40.037Z

所以,我的问题是关于日历和瞬间输出的差异。瞬间的输出是GMT而不是当地时间。 我没有看到任何文档说Instant类只给出GMT中的日期。所以,我不确定为什么会这样。

2 个答案:

答案 0 :(得分:2)

  

在Instant上调用toString会产生如下输出:

     

2013-05-30T23:38:23.085Z

     

此格式遵循ISO-8601标准来表示日期和   时间。

看看:

答案 1 :(得分:0)

拉瓦特的answer是正确的。根据定义,Instant始终为UTC。

toString方法生成的字符串表示格式是标准的,由ISO 8601定义。

Instant类是Java 8及更高版本中内置的java.time框架的一部分。这个框架中的新类取代了Java早期的旧java.util.Date/.Calendar类。

避免使用旧课程,因为它们非常麻烦。不要混淆旧的和新的。诸如toInstant之类的转换方法仅用于在尚未针对新类型更新与旧代码的互操作时使用。

要将Instant调整为时区,请通过ZoneId对象指定时区以生成ZonedDateTime

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

不要被LocalDateTime课程中的“本地”混淆。那个类代表了日期时间的模糊概念。它适用于任何特定时区,因此不依赖于时间轴。