From 4163efd1d2bd7683c9989fb36a629353b280ea06 Mon Sep 17 00:00:00 2001 From: Surya Kant Bansal Date: Sun, 19 Jul 2026 13:50:12 +0530 Subject: [PATCH] Enhance timestamp parsing to support JSON strings Added functionality to parse JSON timestamp strings in RFC3339 format before falling back to Unix nanoseconds. --- rfc3339.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/rfc3339.go b/rfc3339.go index b5c2905..e68ef22 100644 --- a/rfc3339.go +++ b/rfc3339.go @@ -21,12 +21,21 @@ func (t *Timestamp) UnmarshalJSON(data []byte) error { if strData == "null" { return nil } - + // NEW: Try to parse as a JSON string (RFC3339 / ISO8601) first. + // JSON strings are wrapped in double quotes. + if len(data) >= 2 && data[0] == '"' && data[len(data)-1] == '"' { + var parsed time.Time + if err := json.Unmarshal(data, &parsed); err != nil { + return fmt.Errorf("failed to parse timestamp string: %w", err) + } + t.Time = &parsed + return nil + } + // FALLBACK: Parse as Unix nanoseconds (integer) as it did originally ns, err := strconv.ParseInt(strData, 10, 64) if err != nil { return fmt.Errorf("failed to parse timestamp: %w", err) } - utcT := time.Unix(0, ns).UTC() t.Time = &utcT return nil