为了账号安全,请及时绑定邮箱和手机立即绑定

如何设置数据库的时区

如何设置数据库的时区

Go
慕妹3146593 2022-05-23 15:03:07
我正在尝试在gorm中设置数据库的时区。我将我的数据库时区设置为 UTC,在 pgadmin 中我添加了一个带有时区和值 UTC 的参数。一切正常,数据以 UTC 保存,以 UTC 检索,但是当我将新结构保存到数据库时,例如User,保存后如果验证User.created_at不在 UTC 时区,则在我的本地时区。我想让这个工作,因为我创建了一个对User正在进行的请求的响应。更新:我的代码:type Customer struct {    ID          uuid.UUID  `gorm:"type:uuid;primary_key;index;" json:"id"`    CreatedAt   time.Time  `json:"created_at"`    UpdatedAt   time.Time  `json:"updated_at"`    DeletedAt   *time.Time `json:"deleted_at,omitempty"` }
查看完整描述

1 回答

?
qq_遁去的一_1

TA贡献1725条经验 获得超8个赞

你可以在gorm中尝试回调。像这样


// updateTimeStampForCreateCallback will set `CreatedAt`, `UpdatedAt` when creating

func updateTimeStampForCreateCallback(scope *gorm.Scope) {

    if !scope.HasError() {

        now := time.Now().UTC()


        if createdAtField, ok := scope.FieldByName("CreatedAt"); ok {

            if createdAtField.IsBlank {

                createdAtField.Set(now)

            }

        }


        if updatedAtField, ok := scope.FieldByName("UpdatedAt"); ok {

            if updatedAtField.IsBlank {

                updatedAtField.Set(now)

            }

        }

    }

}


// updateTimeStampForUpdateCallback will set `UpdatedAt` when updating

func updateTimeStampForUpdateCallback(scope *gorm.Scope) {

    if _, ok := scope.Get("gorm:update_column"); !ok {

        scope.SetColumn("UpdatedAt", time.Now().UTC())

    }

}

然后在 db.Callback() 中注册


db.Callback().Create().Replace("gorm:update_time_stamp", updateTimeStampForCreateCallback)

db.Callback().Update().Replace("gorm:update_time_stamp", updateTimeStampForUpdateCallback)



查看完整回答
反对 回复 2022-05-23
  • 1 回答
  • 0 关注
  • 297 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号