Как установить часовой пояс базы данных - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь установить часовой пояс базы данных в gorm. Я установил для своей базы данных часовой пояс UT C, в pgadmin я добавил параметр с часовым поясом и значением UT C.
Все работает нормально, данные сохраняются в UT C, извлекаются в UT C, но когда я сохраняю новую структуру в базе данных, например User, после сохранения, если проверить, что User.created_at не в часовом поясе UT C, находится в моем местном часовом поясе.
Я хочу, чтобы это работало , потому что я создаю ответ с созданным 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 Ответ

1 голос
/ 19 марта 2020

Вы можете попробовать обратный вызов в 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)
...