From 7803ec3661b8f10241ee7094c850f9184d95f07a Mon Sep 17 00:00:00 2001 From: Shean de Montigny-Desautels Date: Mon, 23 Sep 2024 12:17:45 -0400 Subject: [PATCH] Fix pgtype.Timestamp json unmarshal Add the missing 'Z' at the end of the timestamp string, so it can be parsed as timestamp in the RFC3339 format. --- pgtype/timestamp.go | 5 ++--- pgtype/timestamp_test.go | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/pgtype/timestamp.go b/pgtype/timestamp.go index 677a2c6ea..ff2739d6b 100644 --- a/pgtype/timestamp.go +++ b/pgtype/timestamp.go @@ -104,8 +104,8 @@ func (ts *Timestamp) UnmarshalJSON(b []byte) error { case "-infinity": *ts = Timestamp{Valid: true, InfinityModifier: -Infinity} default: - // PostgreSQL uses ISO 8601 for to_json function and casting from a string to timestamptz - tim, err := time.Parse(time.RFC3339Nano, *s) + // PostgreSQL uses ISO 8601 wihout timezone for to_json function and casting from a string to timestampt + tim, err := time.Parse(time.RFC3339Nano, *s+"Z") if err != nil { return err } @@ -225,7 +225,6 @@ func discardTimeZone(t time.Time) time.Time { } func (c *TimestampCodec) PlanScan(m *Map, oid uint32, format int16, target any) ScanPlan { - switch format { case BinaryFormatCode: switch target.(type) { diff --git a/pgtype/timestamp_test.go b/pgtype/timestamp_test.go index 31b3ad822..345da819c 100644 --- a/pgtype/timestamp_test.go +++ b/pgtype/timestamp_test.go @@ -128,8 +128,8 @@ func TestTimestampUnmarshalJSON(t *testing.T) { result pgtype.Timestamp }{ {source: "null", result: pgtype.Timestamp{}}, - {source: "\"2012-03-29T10:05:45Z\"", result: pgtype.Timestamp{Time: time.Date(2012, 3, 29, 10, 5, 45, 0, time.UTC), Valid: true}}, - {source: "\"2012-03-29T10:05:45.555Z\"", result: pgtype.Timestamp{Time: time.Date(2012, 3, 29, 10, 5, 45, 555*1000*1000, time.UTC), Valid: true}}, + {source: "\"2012-03-29T10:05:45\"", result: pgtype.Timestamp{Time: time.Date(2012, 3, 29, 10, 5, 45, 0, time.UTC), Valid: true}}, + {source: "\"2012-03-29T10:05:45.555\"", result: pgtype.Timestamp{Time: time.Date(2012, 3, 29, 10, 5, 45, 555*1000*1000, time.UTC), Valid: true}}, {source: "\"infinity\"", result: pgtype.Timestamp{InfinityModifier: pgtype.Infinity, Valid: true}}, {source: "\"-infinity\"", result: pgtype.Timestamp{InfinityModifier: pgtype.NegativeInfinity, Valid: true}}, }