diff --git a/lib/typing/ext/parse_test.go b/lib/typing/ext/parse_test.go index ab73e6b3a..a0e387818 100644 --- a/lib/typing/ext/parse_test.go +++ b/lib/typing/ext/parse_test.go @@ -36,6 +36,27 @@ func TestParseFromInterface(t *testing.T) { _, err := ParseFromInterface(false, TimestampTzKindType) assert.ErrorContains(t, err, "failed to parse colVal, expected type string or *ExtendedTime and got: bool") } + { + // String - RFC3339MillisecondUTC + value, err := ParseFromInterface("2024-09-19T16:05:18.630Z", TimestampTzKindType) + assert.NoError(t, err) + assert.Equal(t, "2024-09-19T16:05:18.630Z", value.String("")) + assert.Equal(t, RFC3339MillisecondUTC, value.nestedKind.Format) + } + { + // String - RFC3339MicrosecondUTC + value, err := ParseFromInterface("2024-09-19T16:05:18.630000Z", TimestampTzKindType) + assert.NoError(t, err) + assert.Equal(t, "2024-09-19T16:05:18.630000Z", value.String("")) + assert.Equal(t, RFC3339MicrosecondUTC, value.nestedKind.Format) + } + { + // String - RFC3339NanosecondUTC + value, err := ParseFromInterface("2024-09-19T16:05:18.630000000Z", TimestampTzKindType) + assert.NoError(t, err) + assert.Equal(t, "2024-09-19T16:05:18.630000000Z", value.String("")) + assert.Equal(t, RFC3339NanosecondUTC, value.nestedKind.Format) + } } func TestParseFromInterfaceDateTime(t *testing.T) { diff --git a/lib/typing/ext/variables.go b/lib/typing/ext/variables.go index 02a409df5..8d4f413ab 100644 --- a/lib/typing/ext/variables.go +++ b/lib/typing/ext/variables.go @@ -11,7 +11,16 @@ const ( ) var supportedDateTimeLayouts = []string{ + // UTC + RFC3339MillisecondUTC, + RFC3339MicrosecondUTC, + RFC3339NanosecondUTC, + // RFC 3339 + RFC3339Millisecond, + RFC3339Microsecond, + RFC3339Nanosecond, time.RFC3339Nano, + // Others ISO8601, time.Layout, time.ANSIC, @@ -37,7 +46,10 @@ var SupportedTimeFormats = []string{ // RFC3339 variants const ( - RFC3339Millisecond = "2006-01-02T15:04:05.000Z07:00" - RFC3339Microsecond = "2006-01-02T15:04:05.000000Z07:00" - RFC3339Nanosecond = "2006-01-02T15:04:05.000000000Z07:00" + RFC3339MillisecondUTC = "2006-01-02T15:04:05.000Z" + RFC3339MicrosecondUTC = "2006-01-02T15:04:05.000000Z" + RFC3339NanosecondUTC = "2006-01-02T15:04:05.000000000Z" + RFC3339Millisecond = "2006-01-02T15:04:05.000Z07:00" + RFC3339Microsecond = "2006-01-02T15:04:05.000000Z07:00" + RFC3339Nanosecond = "2006-01-02T15:04:05.000000000Z07:00" )