Browse Source

Fix date string parsing bug for the SQL Engine. (#7446)

`SQLEngine.valueToTime()` is parsing dates always as UTC (via `time.Parse()`),
regardless of TZ assumptions for different date formats.
master
Lisandro Pin 15 hours ago
committed by GitHub
parent
commit
5fef4145a4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 20
      weed/query/engine/function_helpers.go

20
weed/query/engine/function_helpers.go

@ -102,22 +102,18 @@ func (e *SQLEngine) valueToTime(value *schema_pb.Value) (time.Time, error) {
case *schema_pb.Value_StringValue:
// Try to parse various date/time string formats
dateFormats := []struct {
format string
useLocal bool
format string
tz *time.Location
}{
{"2006-01-02 15:04:05", true}, // Local time assumed for non-timezone formats
{"2006-01-02T15:04:05Z", false}, // UTC format
{"2006-01-02T15:04:05", true}, // Local time assumed
{"2006-01-02", true}, // Local time assumed for date only
{"15:04:05", true}, // Local time assumed for time only
{"2006-01-02 15:04:05", time.Local}, // Local time assumed for non-timezone formats
{"2006-01-02T15:04:05Z", time.UTC}, // UTC format
{"2006-01-02T15:04:05", time.Local}, // Local time assumed
{"2006-01-02", time.Local}, // Local time assumed for date only
{"15:04:05", time.Local}, // Local time assumed for time only
}
for _, formatSpec := range dateFormats {
if t, err := time.Parse(formatSpec.format, v.StringValue); err == nil {
if formatSpec.useLocal {
// Convert to UTC for consistency if no timezone was specified
return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), time.UTC), nil
}
if t, err := time.ParseInLocation(formatSpec.format, v.StringValue, formatSpec.tz); err == nil {
return t, nil
}
}

Loading…
Cancel
Save