You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
DateTimeOffset bounds and elements refuse offsets beyond ±14:00 that timestamptz reads #131
DateTimeOffsetRange, its multirange and DateTimeOffsetSet refuse an offset beyond ±14:00, which timestamptz reads (PostgreSQL takes up to ±15:59). Loud (FormatException). InstantRange reads the same text. Measured on main (3ecfa10) against PostgreSQL 17.10:
Found by LiteralCorpusProbeTests (#123), family offset range, on DateTimeOffsetRange, RangeSet<DateTimeOffsetRange>, DateTimeOffsetSet and DateTimeOffsetSet<T>.
Authority.docs/serialization.md: the text is "the same text the server itself reads". The document already handles the analogous case — a ±HH:mm:ss offset DateTimeOffset cannot hold is read as "that instant at offset zero".
Cause.DateTimeOffset holds offsets up to ±14:00, and IsoTemporal parses with DateTimeOffset.TryParseExact.
Options. Read an offset beyond ±14:00 as the instant at offset zero, like the seconds offset; or document the refusal. Not breaking either way.
Scope note from the fix (PR to follow): the same ±14:00 limit applied to DateTime bounds and elements (IsoTemporal.OffsetLength), so DateTimeRange.Parse("[2026-01-01 10:00:00+15:00,)") threw as well, while timestamp reads it (and drops the offset). Fixed together: both now read up to ±15:59:59, which is PostgreSQL's limit on 16 and 18.
Activity
CaffeinatedCoder commentedon Oct 18, 2026
Scope note from the fix (PR to follow): the same ±14:00 limit applied to
DateTimebounds and elements (IsoTemporal.OffsetLength), soDateTimeRange.Parse("[2026-01-01 10:00:00+15:00,)")threw as well, whiletimestampreads it (and drops the offset). Fixed together: both now read up to ±15:59:59, which is PostgreSQL's limit on 16 and 18.