登录
首页 >  Golang >  Go问答

如何在GORM中设置特定时区的自动创建时间和更新时间?

来源:stackoverflow

时间:2024-03-12 15:33:26 127浏览 收藏

从现在开始,努力学习吧!本文《如何在GORM中设置特定时区的自动创建时间和更新时间?》主要讲解了等等相关知识点,我会在golang学习网中持续更新相关的系列文章,欢迎大家关注并积极留言建议。下面就先一起来看一下本篇正文内容吧,希望能帮到你!

问题内容

我的 MariaDB 数据库的created_at和updated_at字段之前填充了我的特定时区(欧洲/巴黎)的日期。

我现在已经集成了 GORM (v1.23.8),但是,当在我的 GORM 模型中使用 autoCreateTime 和 autoUpdateTime 时,日期始终以 UTC 格式写入。如何配置 GORM,以便 autoCreateTime 和 autoUpdateTime 日期写入与 UTC 不同的时区。

我尝试将 Loc 和 ParseTime 参数添加到 MariaDB 连接字符串中,但这并没有解决问题。


正确答案


虽然有很多原因导致您应该将日期存储在数据库中作为 utc(例如,许多前端框架期望使用 utc 格式的日期,并且会自行本地化它们),因为我正在开发一个已经存储了数据库的遗留系统当地时区的日期,这是我发现适合我的解决方案:

gormDB, err := gorm.Open(mysql.Open(fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", userName, password, hostName, port, dbname)), &gorm.Config{
    NowFunc: func() time.Time {

        currentTime := time.Now()
        _, offset := currentTime.Zone()
        mysqlTime := currentTime.Add(time.Second * time.Duration(offset))
        return mysqlTime
    },
})

gorm v1.23.8 指定 autocreatetime 和 autoupdatetime 字段配置包含 unix 时间戳,该时间戳隐式为 utc 时区,因此似乎无法更改 autocreatetime 和 autoupdatetime 的时区。

解决方法是不使用 autocreatetime 和 autoupdatetime 指定created_at 和updated_at 字段,而是将其指定为普通日期字段并在代码中手动设置日期。

以上就是《如何在GORM中设置特定时区的自动创建时间和更新时间?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>