1
0
mirror of https://github.com/astaxie/beego.git synced 2024-11-22 09:50:55 +00:00

orm fix sqlite3 time convert

This commit is contained in:
slene 2013-11-02 00:51:53 +08:00
parent 1d44018128
commit 89c03870c8
2 changed files with 35 additions and 19 deletions

View File

@ -97,11 +97,7 @@ func (d *dbBase) collectFieldValue(mi *modelInfo, fi *fieldInfo, ind reflect.Val
case TypeDateField, TypeDateTimeField: case TypeDateField, TypeDateTimeField:
value = field.Interface() value = field.Interface()
if t, ok := value.(time.Time); ok { if t, ok := value.(time.Time); ok {
if fi.fieldType == TypeDateField { d.ins.TimeToDB(&t, tz)
d.ins.TimeToDB(&t, DefaultTimeLoc)
} else {
d.ins.TimeToDB(&t, tz)
}
value = t value = t
} }
default: default:
@ -130,11 +126,7 @@ func (d *dbBase) collectFieldValue(mi *modelInfo, fi *fieldInfo, ind reflect.Val
case TypeDateField, TypeDateTimeField: case TypeDateField, TypeDateTimeField:
if fi.auto_now || fi.auto_now_add && insert { if fi.auto_now || fi.auto_now_add && insert {
tnow := time.Now() tnow := time.Now()
if fi.fieldType == TypeDateField { d.ins.TimeToDB(&tnow, tz)
d.ins.TimeToDB(&tnow, DefaultTimeLoc)
} else {
d.ins.TimeToDB(&tnow, tz)
}
value = tnow value = tnow
if fi.isFielder { if fi.isFielder {
f := field.Addr().Interface().(Fielder) f := field.Addr().Interface().(Fielder)
@ -895,18 +887,17 @@ setValue:
t time.Time t time.Time
err error err error
) )
if fi.fieldType == TypeDateField { if len(s) >= 19 {
s = s[:19]
t, err = time.ParseInLocation(format_DateTime, s, tz)
} else {
if len(s) > 10 { if len(s) > 10 {
s = s[:10] s = s[:10]
} }
t, err = time.ParseInLocation(format_Date, s, DefaultTimeLoc) t, err = time.ParseInLocation(format_Date, s, tz)
} else {
if len(s) > 19 {
s = s[:19]
}
t, err = time.ParseInLocation(format_DateTime, s, tz)
t = t.In(DefaultTimeLoc)
} }
t = t.In(DefaultTimeLoc)
if err != nil && s != "0000-00-00" && s != "0000-00-00 00:00:00" { if err != nil && s != "0000-00-00" && s != "0000-00-00 00:00:00" {
tErr = err tErr = err
goto end goto end

View File

@ -50,9 +50,34 @@ outFor:
switch v := arg.(type) { switch v := arg.(type) {
case []byte: case []byte:
case string:
if fi != nil {
if fi.fieldType == TypeDateField || fi.fieldType == TypeDateTimeField {
var t time.Time
var err error
if len(v) >= 19 {
s := v[:19]
t, err = time.ParseInLocation(format_DateTime, s, DefaultTimeLoc)
} else {
s := v
if len(v) > 10 {
s = v[:10]
}
t, err = time.ParseInLocation(format_Date, s, DefaultTimeLoc)
}
if err == nil {
if fi.fieldType == TypeDateField {
v = t.In(tz).Format(format_Date)
} else {
v = t.In(tz).Format(format_DateTime)
}
}
}
}
arg = v
case time.Time: case time.Time:
if fi != nil && fi.fieldType == TypeDateField { if fi != nil && fi.fieldType == TypeDateField {
arg = v.In(DefaultTimeLoc).Format(format_Date) arg = v.In(tz).Format(format_Date)
} else { } else {
arg = v.In(tz).Format(format_DateTime) arg = v.In(tz).Format(format_DateTime)
} }