Java 日历中的toInstant()以GMT而不是本地时间显示
我正在尝试将日历实例转换为instant,具体操作如下Java 日历中的toInstant()以GMT而不是本地时间显示,java,date,datetime,calendar,Java,Date,Datetime,Calendar,我正在尝试将日历实例转换为instant,具体操作如下 Calendar cal = new GregorianCalendar(); System.out.println(cal.getTime()); Instant inst = cal.toInstant(); System.out.println(inst.toString()); 并且,它的输出如下所示 Calendar cal = new GregorianCalendar(); S
Calendar cal = new GregorianCalendar();
System.out.println(cal.getTime());
Instant inst = cal.toInstant();
System.out.println(inst.toString());
并且,它的输出如下所示
Calendar cal = new GregorianCalendar();
System.out.println(cal.getTime());
Instant inst = cal.toInstant();
System.out.println(inst.toString());
2015年10月30日星期五17:23:40
2015-10-30T11:53:40.037Z
所以,我的问题是关于日历和瞬间输出的差异。瞬间的输出以GMT而不是本地时间为单位。
我没有看到任何文档说Instant类只给出GMT的日期。所以,我不知道为什么会发生这种情况
在瞬间调用toString会产生如下输出:
2013-05-30T23:38:23.085Z
此格式遵循ISO-8601标准表示日期和时间
时间
看看:
- 类文档
即时
始终为UTC
由toString
方法生成的字符串表示格式是ISO 8601定义的标准格式
Instant
类是java 8及更高版本中内置的java.time框架的一部分。该框架中的新类取代了java早期的旧java.util.Date/.Calendar类
避免使用旧类,因为它们非常麻烦。不要混淆新旧。转换方法(如toInstant
)仅适用于尚未更新新类型的旧代码的互操作
要将即时
调整为时区,请通过ZoneId
对象指定时区,以生成zoneDateTime
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
不要被LocalDateTime
类中的“Local”混淆。该类表示日期时间的模糊概念。它不适用于任何特定时区,因此不受时间线的限制