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 1 day ago
committed by GitHub
parent
commit
5fef4145a4
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 18
      weed/query/engine/function_helpers.go

18
weed/query/engine/function_helpers.go

@ -103,21 +103,17 @@ func (e *SQLEngine) valueToTime(value *schema_pb.Value) (time.Time, error) {
// Try to parse various date/time string formats
dateFormats := []struct {
format string
useLocal bool
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