From cdf97521e7640c04af191cdc8be01279f6d40244 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 16 Jun 2020 17:52:25 +0800 Subject: [PATCH 1/2] Automatically convert datetime to int64 --- integrations/session_find_test.go | 23 +++++++++++++++++++++++ session_convert.go | 20 +++++++++++++++++++- 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/integrations/session_find_test.go b/integrations/session_find_test.go index c3e99183..0c25a1e9 100644 --- a/integrations/session_find_test.go +++ b/integrations/session_find_test.go @@ -962,3 +962,26 @@ func TestDistinctAndCols(t *testing.T) { assert.EqualValues(t, 1, len(names)) assert.EqualValues(t, "test", names[0]) } + +func TestDateTimeInt64(t *testing.T) { + type DateTimeInt64 struct { + Id int64 + TimeStamp int64 `xorm:"datetime"` + } + + assert.NoError(t, PrepareEngine()) + assertSync(t, new(DateTimeInt64)) + + ts := time.Now().Unix() + cnt, err := testEngine.Insert(&DateTimeInt64{ + TimeStamp: ts, + }) + assert.NoError(t, err) + assert.EqualValues(t, 1, cnt) + + var dts []DateTimeInt64 + err = testEngine.Find(&dts) + assert.NoError(t, err) + assert.EqualValues(t, 1, len(dts)) + assert.EqualValues(t, ts, dts[0].TimeStamp) +} diff --git a/session_convert.go b/session_convert.go index a6839947..1d3ea160 100644 --- a/session_convert.go +++ b/session_convert.go @@ -168,7 +168,25 @@ func (session *Session) bytes2Value(col *schemas.Column, fieldValue *reflect.Val } else if strings.EqualFold(sdata, "false") { x = 0 } else { - x, err = strconv.ParseInt(sdata, 10, 64) + if col.SQLType.Name == schemas.DateTime { + if len(sdata) == 20 { + t, err := time.Parse("2006-01-02T15:04:05Z", sdata) + if err != nil { + return fmt.Errorf("arg %v as int: %s", key, err.Error()) + } + x = t.Unix() + } else if len(sdata) == 19 { + t, err := time.Parse("2006-01-02 15:04:05", sdata) + if err != nil { + return fmt.Errorf("arg %v as int: %s", key, err.Error()) + } + x = t.Unix() + } else { + x, err = strconv.ParseInt(sdata, 10, 64) + } + } else { + x, err = strconv.ParseInt(sdata, 10, 64) + } } if err != nil { return fmt.Errorf("arg %v as int: %s", key, err.Error()) -- 2.40.1 From 4ee1cf251f859ec9538522a516c835ac875d8356 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 3 Nov 2020 14:23:25 +0800 Subject: [PATCH 2/2] Fix another time format --- session_convert.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/session_convert.go b/session_convert.go index 1d3ea160..4a4dd8be 100644 --- a/session_convert.go +++ b/session_convert.go @@ -176,7 +176,11 @@ func (session *Session) bytes2Value(col *schemas.Column, fieldValue *reflect.Val } x = t.Unix() } else if len(sdata) == 19 { - t, err := time.Parse("2006-01-02 15:04:05", sdata) + var parseFormat = "2006-01-02 15:04:05" + if sdata[10] == 'T' { + parseFormat = "2006-01-02T15:04:05" + } + t, err := time.Parse(parseFormat, sdata) if err != nil { return fmt.Errorf("arg %v as int: %s", key, err.Error()) } -- 2.40.1