Go 如何设置数据库的时区

Go 如何设置数据库的时区,go,go-gorm,Go,Go Gorm,我试图在gorm中设置数据库的时区。 我将数据库时区设置为UTC,在pgadmin中添加了一个带有时区和UTC值的参数。 一切正常,数据以UTC格式保存,以UTC格式检索,但当我将新结构保存到数据库时,例如,用户,保存后,如果验证用户。在创建的\u不在UTC时区,而是在我的本地时区。 我想让它正常工作,因为我用创建的用户创建了对正在进行的请求的响应 更新: 我的代码: type Customer struct { ID uuid.UUID `gorm:"type:uu

我试图在gorm中设置数据库的时区。 我将数据库时区设置为UTC,在pgadmin中添加了一个带有时区和UTC值的参数。
一切正常,数据以UTC格式保存,以UTC格式检索,但当我将新结构保存到数据库时,例如,
用户
,保存后,如果验证
用户。在
创建的\u不在UTC时区,而是在我的本地时区。
我想让它正常工作,因为我用创建的
用户
创建了对正在进行的请求的响应

更新: 我的代码:

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"`
 }

您可以在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()中注册


如何设置?您是从Go传递还是由Postgres在insert时设置的?我不是传递,我让gorm来处理该列的确切类型?项目约定,我们只使用UTC和前端转换为客户端的时区确保,在连接和/或在每个查询中明确指定时区,值存储在哪个时区并不重要,它根本不会改变任何东西在连接字符串中设置时区。如果将其设置为
UTC
,则所有谓词都将针对UTC运行(除非您明确指定),而不管值最初存储在什么tz中。
db.Callback().Create().Replace("gorm:update_time_stamp", updateTimeStampForCreateCallback)
db.Callback().Update().Replace("gorm:update_time_stamp", updateTimeStampForUpdateCallback)