我的MariaDB数据库的CREATED_AT和UPDATED_AT字段以前填充了我的特定时区(欧洲/巴黎)的日期.

我现在已经集成了GORM(v1.23.8),然而,当在我的GORM模型中使用AutoCreateTime和AutoUpdateTime时,日期总是以UTC写的.如何配置GORM,以便在与UTC不同的时区中写入自动创建时间和自动更新时间日期.

我曾try 将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
    },
})

Go相关问答推荐

如何使用GRPC UnaryClientInterceptor中的`maily`参数?

如何使用我的 struct 化日志(log)记录格式使人panic ?

理解Golang中的IOTA和常量

exec的可执行决议.命令+路径

如何在 Chi Router 的受保护路由下提供静态文件(尤其是图像)?

为什么 mux.Vars() 返回空的 map[]

使用Cookie身份验证的Gorilla Golang Websocket优化

如何在 Go 服务中导入 monorepo 中的包?

Gorm 预加载给出了模糊的列错误

转换朴素递归硬币问题时的记忆错误

获取不带类型参数的泛型 struct 的类型名称

如何根据 Go 中第二次出现的分隔符拆分字符串?

Golang模板无法访问embedFS中的文件

Golang 使用 docker 将敏感数据作为参数传递

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

手动将 OpenTelemetry 上下文从 golang 提取到字符串中?

如何允许可转换为指针的泛型类型参数化另一种可转换为指针的泛型类型?

try 创建新的 etcdv3 客户端时出现pc error: code = Unavailable desc = error reading from server: EOF

是否存在一个Go泛型类型约束,该约束捕获了将类型用作映射中的键的能力?

Go 1.18 泛型如何使用接口定义新的类型参数