From b8d929c3c75459415bbf7ccd4ed0d4eedfc52be9 Mon Sep 17 00:00:00 2001 From: Qiaolin Yu <90088090+Qiaolin-Yu@users.noreply.github.com> Date: Tue, 20 Sep 2022 16:48:08 +0800 Subject: [PATCH] time: fix the fraction loss when encountering time string with timezone suffix (#37820) * fix the issue of fraction loss when inserting time item * fix wrong index * add comments Co-authored-by: Weizhen Wang Co-authored-by: Ti Chi Robot --- types/time.go | 10 +++++++++- types/time_test.go | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/types/time.go b/types/time.go index 3d997d940ddf4..132e904d6da00 100644 --- a/types/time.go +++ b/types/time.go @@ -575,9 +575,17 @@ func GetFsp(s string) int { // GetFracIndex finds the last '.' for get fracStr, index = -1 means fracStr not found. // but for format like '2019.01.01 00:00:00', the index should be -1. +// It will not be affected by the time zone suffix. For format like '2020-01-01 12:00:00.123456+05:00', the index should be 19. func GetFracIndex(s string) (index int) { + tzIndex, _, _, _, _ := GetTimezone(s) + var end int + if tzIndex != -1 { + end = tzIndex - 1 + } else { + end = len(s) - 1 + } index = -1 - for i := len(s) - 1; i >= 0; i-- { + for i := end; i >= 0; i-- { if unicode.IsPunct(rune(s[i])) { if s[i] == '.' { index = i diff --git a/types/time_test.go b/types/time_test.go index af88a18ea1fcf..cf14ca56f8f0a 100644 --- a/types/time_test.go +++ b/types/time_test.go @@ -110,6 +110,9 @@ func TestDateTime(t *testing.T) { {"2020-05-28 23:59:59T T00:00:00", "2020-05-28 23:59:59"}, {"2020-10-22 10:31-10:12", "2020-10-22 10:31:10"}, {"2018.01.01 01:00:00", "2018-01-01 01:00:00"}, + + // For issue 35291 + {"2020-01-01 12:00:00.123456+05:00", "2020-01-01 07:00:00.123456"}, } for _, test := range table {