From e8c0ff31b374f62e31806f7534df9fcceee7279f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=86=E8=AE=AF=E5=9C=A8=E7=BA=BF?= Date: Wed, 16 Apr 2014 20:08:53 +0800 Subject: [PATCH 1/2] update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 商讯在线 --- engine.go | 8 ++++---- session.go | 8 ++++---- xorm.go | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/engine.go b/engine.go index 106f5b84..1246590d 100644 --- a/engine.go +++ b/engine.go @@ -1086,13 +1086,13 @@ func (engine *Engine) TZTime(t time.Time) (r time.Time) { return } -func (engine *Engine) NowTime(SQLTypeName string) interface{} { +func (engine *Engine) NowTime(sqlTypeName string) interface{} { t := time.Now() - return engine.FormatTime(SQLTypeName, t) + return engine.FormatTime(sqlTypeName, t) } -func (engine *Engine) FormatTime(SQLTypeName string, t time.Time) (v interface{}) { - switch SQLTypeName { +func (engine *Engine) FormatTime(sqlTypeName string, t time.Time) (v interface{}) { + switch sqlTypeName { case Time: s := engine.TZTime(t).Format("2006-01-02 15:04:05") //time.RFC3339 v = s[11:19] diff --git a/session.go b/session.go index 36625653..93a523fe 100644 --- a/session.go +++ b/session.go @@ -1964,7 +1964,7 @@ func (session *Session) byte2Time(col *Column, data []byte) (outTime time.Time, outErr = errors.New(fmt.Sprintf("unsupported time format %v: %v", sdata, err)) return } - outTime = x + outTime = session.Engine.TZTime(x) return } @@ -2402,10 +2402,10 @@ func (session *Session) value2Interface(col *Column, fieldValue reflect.Value) ( } } switch fieldValue.Interface().(type) { - case time.Time: - tf := session.Engine.FormatTime(col.SQLType.Name,fieldValue.Interface().(time.Time)) + case time.Time: + tf := session.Engine.FormatTime(col.SQLType.Name, fieldValue.Interface().(time.Time)) return tf, nil - default: + default: return fieldValue.Interface(), nil } } diff --git a/xorm.go b/xorm.go index 11028edf..88d99e79 100644 --- a/xorm.go +++ b/xorm.go @@ -24,7 +24,7 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) { DriverName: driverName, DataSourceName: dataSourceName, Filters: make([]Filter, 0), - TimeZone: "UTC", + TimeZone: "Local", } engine.SetMapper(SnakeMapper{}) From a4876ffec2635c5da5f520024982657c77b7951a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=95=86=E8=AE=AF=E5=9C=A8=E7=BA=BF?= Date: Wed, 16 Apr 2014 20:56:04 +0800 Subject: [PATCH 2/2] update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 商讯在线 --- engine.go | 12 ++++++++++++ session.go | 14 +++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/engine.go b/engine.go index 1246590d..f98ea4c7 100644 --- a/engine.go +++ b/engine.go @@ -1086,6 +1086,18 @@ func (engine *Engine) TZTime(t time.Time) (r time.Time) { return } +func (engine *Engine) TZLocation() (r *time.Location) { + switch engine.TimeZone { + case "Local", "L": + r = time.Local + case "UTC", "U": + fallthrough + default: + r = time.UTC + } + return +} + func (engine *Engine) NowTime(sqlTypeName string) interface{} { t := time.Now() return engine.FormatTime(sqlTypeName, t) diff --git a/session.go b/session.go index 93a523fe..1e3e9c19 100644 --- a/session.go +++ b/session.go @@ -1930,17 +1930,17 @@ func (session *Session) byte2Time(col *Column, data []byte) (outTime time.Time, x = time.Unix(0, sd) } } else if len(sdata) > 19 { - x, err = time.Parse(time.RFC3339Nano, sdata) + x, err = time.ParseInLocation(time.RFC3339Nano, sdata, session.Engine.TZLocation()) if err != nil { - x, err = time.Parse("2006-01-02 15:04:05.999999999", sdata) + x, err = time.ParseInLocation("2006-01-02 15:04:05.999999999", sdata, session.Engine.TZLocation()) } if err != nil { - x, err = time.Parse("2006-01-02 15:04:05.9999999 Z07:00", sdata) + x, err = time.ParseInLocation("2006-01-02 15:04:05.9999999 Z07:00", sdata, session.Engine.TZLocation()) } } else if len(sdata) == 19 { - x, err = time.Parse("2006-01-02 15:04:05", sdata) + x, err = time.ParseInLocation("2006-01-02 15:04:05", sdata, session.Engine.TZLocation()) } else if len(sdata) == 10 && sdata[4] == '-' && sdata[7] == '-' { - x, err = time.Parse("2006-01-02", sdata) + x, err = time.ParseInLocation("2006-01-02", sdata, session.Engine.TZLocation()) } else if col.SQLType.Name == Time { if strings.Contains(sdata, " ") { ssd := strings.Split(sdata, " ") @@ -1955,7 +1955,7 @@ func (session *Session) byte2Time(col *Column, data []byte) (outTime time.Time, //fmt.Println(sdata) st := fmt.Sprintf("2006-01-02 %v", sdata) - x, err = time.Parse("2006-01-02 15:04:05", st) + x, err = time.ParseInLocation("2006-01-02 15:04:05", st, session.Engine.TZLocation()) } else { outErr = errors.New(fmt.Sprintf("unsupported time format %v", sdata)) return @@ -1964,7 +1964,7 @@ func (session *Session) byte2Time(col *Column, data []byte) (outTime time.Time, outErr = errors.New(fmt.Sprintf("unsupported time format %v: %v", sdata, err)) return } - outTime = session.Engine.TZTime(x) + outTime = x return }