Java Date 8上的Java Instant.parse

Jer*_*ook 3 java time kml datetime-parsing java.time

我有一些旧的KML文档,其中包括时间戳记条目。为什么使用即时分析时,以下日期无效?假定这两种方法都可以解析ISO 8601格式的日期。

字符串dateString =“ 2017-12-04T08:06:60Z”

使用

java.time.Instant.parse(dateString)
Run Code Online (Sandbox Code Playgroud)

引发错误

"DateTimeParseException Text 2017-12-04T08:06:60Z could not be parsed at index 0."
Run Code Online (Sandbox Code Playgroud)

但是,使用时

Date myDate =   javax.xml.bind.DatatypeConverter.parseDateTime( dateString )
Run Code Online (Sandbox Code Playgroud)

myDate已正确解析。

Nic*_*s K 5

  1. 60秒不是有效时间。表示这是无效的2017-12-04T08:06:60Z,如果是60秒,那么分钟应该增加了,您的时间将是2017-12-04T08:07:00Z
  2. 使用有效的日期然后解析String可以正常工作:

    String date = "2017-12-04T08:07:00Z";
    System.out.println(Instant.parse(date));
    
    Run Code Online (Sandbox Code Playgroud)

同样,java.time忽略leap秒。从文档

不需要使用JSR-310 API来实现Java时标,即可提供亚秒级精度或单调或平稳进行的时钟。因此,不需要实际执行UTC-SLS转换或意识到leap秒的实现。但是,JSR-310确实要求实现必须记录它们在定义代表当前时刻的时钟时使用的方法。有关可用时钟的详细信息,请参见时钟。

  • “ 60秒不是有效时间”-好吧,这完全取决于您对of秒的看法。但是,即使您加上leap秒,我也认为*此特定*日期/时间无效,因为那不是观察到observed秒的时间。 (3认同)