dm3 / clojure.java-time

Java 8 Date-Time API for Clojure
MIT License
461 stars 45 forks source link

When using `java-time.api/formatter`: java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: InstantSeconds #112

Open devurandom opened 4 weeks ago

devurandom commented 4 weeks ago
(jt/instant (jt/formatter "YYYYMMdd'T'HHmmssX" {:resolver-style :lenient
                                                :case           :insensitive})
            "20240611T131542Z")
; throws:
; java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: InstantSeconds
;                         java.time.DateTimeException: Unable to obtain Instant from TemporalAccessor: {MonthOfYear=6, WeekBasedYear[WeekFields[SUNDAY,1]]=2024, DayOfMonth=11, OffsetSeconds=0},ISO resolved to 13:15:42 of type java.time.format.Parsed
;                          clojure.lang.ExceptionInfo: Conversion failed

On the other hand:

(jt/instant (-> (.toFormatter (doto (DateTimeFormatterBuilder.)
                                (.parseLenient)
                                (.parseCaseInsensitive)
                                (.appendValue ChronoField/YEAR 4)
                                (.appendValue ChronoField/MONTH_OF_YEAR 2)
                                (.appendValue ChronoField/DAY_OF_MONTH 2)
                                (.appendLiteral "T")
                                (.appendValue ChronoField/HOUR_OF_DAY 2)
                                (.appendValue ChronoField/MINUTE_OF_HOUR 2)
                                (.appendValue ChronoField/SECOND_OF_MINUTE 2)
                                (.appendOffset "+HHMMss" "Z")))
                (.withZone (ZoneId/of "UTC")))
            "20240611T131542Z")
;=> #object[java.time.Instant 0x52b9aba9 "2024-06-11T13:15:42Z"]

I would have expected both formatters to be (more or less) equivalent.

(My aim is to build a formatter and parser for the ISO 8601 "basic" format, as opposed to the "extended" format containing dashes and colons. All values need to be in the UTC timezone.)