From b211a2724f728948957e8267ee9d722e325cd801 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Thu, 10 Nov 2022 14:51:52 +0800 Subject: [PATCH] expression: adjust DST for convert_tz() (#37206) (#37953) close pingcap/tidb#30081 --- expression/builtin_time.go | 2 +- expression/builtin_time_test.go | 2 +- expression/integration_test.go | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/expression/builtin_time.go b/expression/builtin_time.go index ef387deb6cacb..9901b9323d060 100644 --- a/expression/builtin_time.go +++ b/expression/builtin_time.go @@ -5932,7 +5932,7 @@ func (b *builtinConvertTzSig) convertTz(dt types.Time, fromTzStr, toTzStr string } } - t, err := dt.GoTime(fromTz) + t, err := dt.AdjustedGoTime(fromTz) if err != nil { return types.ZeroTime, true, nil } diff --git a/expression/builtin_time_test.go b/expression/builtin_time_test.go index 703d6f38160d5..2fcf98d3db3d8 100644 --- a/expression/builtin_time_test.go +++ b/expression/builtin_time_test.go @@ -2725,7 +2725,7 @@ func TestConvertTz(t *testing.T) { {"2021-10-31 02:59:59", "Europe/Amsterdam", "+02:00", true, "2021-10-31 03:59:59"}, {"2021-10-31 02:00:00", "Europe/Amsterdam", "+01:00", true, "2021-10-31 02:00:00"}, {"2021-10-31 03:00:00", "Europe/Amsterdam", "+01:00", true, "2021-10-31 03:00:00"}, - {"2021-03-28 02:30:00", "Europe/Amsterdam", "UTC", true, ""}, + {"2021-03-28 02:30:00", "Europe/Amsterdam", "UTC", true, "2021-03-28 01:00:00"}, {"2021-10-22 10:00:00", "Europe/Tallinn", "SYSTEM", true, t1.In(loc2).Format("2006-01-02 15:04:00")}, {"2021-10-22 10:00:00", "SYSTEM", "Europe/Tallinn", true, t2.In(loc1).Format("2006-01-02 15:04:00")}, } diff --git a/expression/integration_test.go b/expression/integration_test.go index d80c53d9fa2a1..b3aa0c84f7195 100644 --- a/expression/integration_test.go +++ b/expression/integration_test.go @@ -6920,6 +6920,17 @@ func TestIssue28739(t *testing.T) { " ")) } +func TestIssue30081(t *testing.T) { + store, clean := testkit.CreateMockStore(t) + defer clean() + tk := testkit.NewTestKit(t, store) + tk.MustExec(`USE test`) + tk.MustQuery(`SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central');`). + Check(testkit.Rows(`2007-03-11 01:00:00`)) + tk.MustQuery(`SELECT CONVERT_TZ('2007-03-11 3:00:00','US/Eastern','US/Central');`). + Check(testkit.Rows(`2007-03-11 01:00:00`)) +} + func TestIssue30326(t *testing.T) { store, clean := testkit.CreateMockStore(t) defer clean()