ZonedDateTime toString compatability with ISO 8601

前端 未结 4 2276
走了就别回头了
走了就别回头了 2021-02-18 23:43

I am trying to ensure that calling toString() on my ZonedDateTime Object will comply with ISO-8601 format.

The documentation for the toSt

4条回答
  •  遇见更好的自我
    2021-02-18 23:48

    This is the complete specification:

     * Outputs this date-time as a {@code String}, such as
     * {@code 2007-12-03T10:15:30+01:00[Europe/Paris]}.
     * 

    * The format consists of the {@code LocalDateTime} followed by the {@code ZoneOffset}. * If the {@code ZoneId} is not the same as the offset, then the ID is output. * The output is compatible with ISO-8601 if the offset and ID are the same.

    The Javadoc specification refers to the case where the ZonedDateTime is constructed with a ZoneOffset rather than a named ZoneId, thus where the offset and ID are the same:

    System.out.println(ZonedDateTime.now(ZoneId.of("Europe/Paris")));
    // 2017-04-26T15:13:12.006+02:00[Europe/Paris]
    
    System.out.println(ZonedDateTime.now(ZoneOffset.ofHours(2)));
    // 2017-04-26T15:13:12.016+02:00
    

    As can be seen, in the second case, where a ZoneOffset is used, the toString() format omits the square bracket section at the end. By omitting that section, the result is ISO-8601 compatible.

    boolean iso8601Compatible = zdt.getZone() instanceof ZoneOffset;
    

    To guarantee an ISO-8601 compatible output use toOffsetDateTime():

    String isoCompatible = zdt.toOffsetDateTime().toString();
    

    or a formatter.

提交回复
热议问题