在GORM中,如何在特定时区配置autoCreateTime和autoUpdateTime



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

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

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

GORM v1.23.8指定autoCreateTime和autoUpdateTime字段配置包含一个UNIX时间戳,该时间戳隐含为UTC时区,因此似乎不可能更改自动创建时间和自动更新时间的时区。

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

虽然有很多原因可以将日期存储在数据库中作为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
},
})

最新更新