沙滩星空的博客沙滩星空的博客

xorm应用程序时区和数据库时区问题

问题

进行 golang 应用开发时,更新 sqlite3 数据库的 executed_at 字段,保存成功。
Navicat 显示数据库中的值为: 2023-01-29 14:44:39.4410545 +0800 CST
代码使用 xorm 包读取,显示值为 2023-01-29 22:44:39.4410545 +0800 CST, 刚好多8个小时。

解决

xorm 数据库引擎 engine 初始化时,设置 engine.TZLocationengine.DatabaseTZ 为东八区。
(我这边只设置 engine.DatabaseTZ 便可解决,但只设置 engine.TZLocation 不行。)

package database

import (
    "time"
    _ "github.com/mattn/go-sqlite3"
    "xorm.io/xorm"
    "xorm.io/xorm/names"
)

...
var err error
var engine *xorm.Engine
engine, err = xorm.NewEngine("sqlite3", config.SQLITE_FILENAME)
ormMap := names.GonicMapper{}
engine.SetMapper(ormMap)
engine.TZLocation, _ = time.LoadLocation("Asia/Shanghai") // 本程序时区设置为上海
engine.DatabaseTZ, _ = time.LoadLocation("Asia/Shanghai") // 数据库时区设置为上海
engine.SetTableMapper(ormMap)
engine.SetColumnMapper(ormMap)
engine.ShowSQL(true)
...

sqlite数据库时区问题,engine.TZLocation与engine.DatabaseTZ设置的时机不同,时间打印结果会不同 https://gitea.com/xorm/xorm/issues/1612

未经允许不得转载:沙滩星空的博客 » xorm应用程序时区和数据库时区问题

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址