请教疑是xorm时区的问题

我系统设置的时区是+8 CST ;Mysql时区与系统一样。碰到问题是这样:
Revel+Xorm, time.Now() 往数据库里写进去的时间正常,但一读出来就自动给我+8小时,不知道需要在哪里设置一下吗?Xorm某个参数?谢谢!

共 10 个回复


yufeng

你这样试试

    time.Now().Local()
# 0

yue

谢谢@yufeng ,我用 time.Now()和 time.Now().Local()得到的时间、以及写进数据库后的时间都正确。就是用Xorm engine.Where…Get 读出来后,时间加了8小时,感觉XORM是按照UTC 时间来处理的,检查我的系统Ubuntu15.04 和Mysql都是本地时区,不知道哪里出了问题。

@xiaolunwen 大神什么时候能在线呢?请帮忙分析下呀,谢谢了!

# 1

yue

改成UTC时间后正常,但不是本地时间啊

# 2

dxb350352

@yue我也出现了这样的问题,求解!!!!!!!!!!

# 3

coldstar

我看了看gogs中也是hack了一下,算了临时使用我也hack一下吧,多了8小时去掉就好了嘛

// FixUTCTime 默认返回的时间为UTC需要去除8小时
func FixUTCTime(t time.Time) time.Time {
    return t.Add(time.Second * -28800)
}
# 4

xiaolunwen

xorm默认使用的时区是time.Local()就是服务器本地时区。这个参数可以通过engine.TZLocation, _ = time.LoadLocation('Asia/Shanghai')来改变。不过如果都是Local按理应该没有问题,如果出现了问题可能是bug,可以到 github.com/go-xorm/xorm 提交个issue。另外你可以尝试更新下最新版本,也许已经解决了你的问题。

# 5

xiaolunwen

不好意思,好久没上论坛了。一般在QQ群里面。

# 6

xiao_feng_shu_yu

xorm.NewEngine()dataSourceName是什么,如果加了parseTime=true就会出现你的情况

# 7

tupunco

配置 parseTime=true&loc=Local, 具体说明请查看这里 beego_时区设置

使用 go-sql-driver 驱动时,请注意参数设置
从某一版本开始,驱动默认使用UTC时间,而非本地时间,所以请指定时区参数或者全部以UTC时间存取
例如:root:root@/orm_test?charset=utf8&loc=Asia%2FShanghai
参见 loc / parseTime

# 8

franknova

db, err := xorm.NewEngine("mysql", "root:xxxx@(127.0.0.1:3306)/xxx")
if err != nil {
    fmt.Println(err)
    return
}
db.DatabaseTZ = time.UTC
db.TZLocation = time.UTC
# 9