source

GORM에서는 autoCreateTime 및 autoUpdateTime을 특정 시간대로 설정하려면 어떻게 해야 합니까?

factcode 2022. 9. 22. 00:07
반응형

GORM에서는 autoCreateTime 및 autoUpdateTime을 특정 시간대로 설정하려면 어떻게 해야 합니까?

MariaDB 데이터베이스의 created_at 필드와 updated_at 필드는 이전에 특정 시간대(유럽/파리)의 날짜로 채워져 있습니다.

GORM(v1.23.8)을 통합했습니다만, GORM 모델에서 autoCreateTime과 autoUpdateTime을 사용하는 경우, 날짜는 항상 UTC로 표시됩니다.autoCreateTime 및 autoUpdateTime 날짜가 UTC와는 다른 시간대에 기록되도록 GORM을 설정하려면 어떻게 해야 합니까?

Loc 및 Parse Time 파라미터를 MariaDB 연결 문자열에 추가하려고 했지만 문제가 해결되지 않았습니다.

GORM v1.23.8은 UNIX 타임스탬프를 포함하도록 autoCreateTime 및 autoUpdateTime 필드 설정을 지정합니다.이 타임스탬프는 암묵적으로 UTC 타임존이기 때문에 autoCreateTime 및 autoUpdateTime의 타임존은 변경할 수 없는 것 같습니다.

회피책은 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
    },
})

언급URL : https://stackoverflow.com/questions/73497397/in-gorm-how-to-configure-autocreatetime-and-autoupdatetime-in-specific-timezone

반응형