Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日历中的toInstant()以GMT而不是本地时间显示_Java_Date_Datetime_Calendar - Fatal编程技术网

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

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

我正在尝试将日历实例转换为instant,具体操作如下

    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”混淆。该类表示日期时间的模糊概念。它不适用于任何特定时区,因此不受时间线的限制