Skip to content

Instant::toISOString() is not RFC 3339 compliant #110

Closed

Description

@JanTvrdik

Instant::toISOString() / ZonedDateTime::toISOString returns value that is not RFC 3339 compliant, because it will omit seconds, when its value is zero.

This is causing portability issues, for example, such value is not accepted by java.time.Instant.parse.

Java sandbox

RFC 3339 format description

Activity

  1. added this to the 0.8.0 milestone on Jul 6, 2024
  2. BenMorel commented on Jul 6, 2024

    @BenMorel
    Member

    Good point, thanks for reporting it @JanTvrdik!

    I'm surprised to see that the behaviour is different for LocalDateTime and LocalTime: sandbox.

    This is probably the source of confusion when I first implemented ZonedDateTime::__toString(), where I just concatenated the output of the LocalDateTime with the timezone.

    I'll work on a fix, however this will target version 0.8.0 as this is technically a BC break.

    What about parsing, should we force seconds as well? I'm leaning towards yes.

  3. JanTvrdik commented on Jul 7, 2024

    @JanTvrdik
    Author

    What about parsing, should we force seconds as well?

    Java allows missing seconds when parsing ZonedDateTime, LocalDateTime and LocalTime. The missing seconds are allowed by ISO 8601. You also have the problem, that you would be unable to parse string that were generated by brick/date-time < 0.8. So overall I think it's better to keep the parser unchanged.

  4. BenMorel commented on Sep 30, 2026

    @BenMorel
    Member

    Released as 0.10.0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions