我正在尝试将Calendar实例转换为即时实例,我按照以下方式执行此操作
s1
并且,它的输出如下
10月30日星期五17:23:40 IST 2015
2015-10-30T11:53:40.037Z
所以,我的问题是关于日历和瞬间输出的差异。瞬间的输出是GMT而不是当地时间。 我没有看到任何文档说Instant类只给出GMT中的日期。所以,我不确定为什么会这样。
答案 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
课程中的“本地”混淆。那个类代表了日期时间的模糊概念。它不适用于任何特定时区,因此不依赖于时间轴。