csdn0811 2024-04-05 21:24 采纳率: 60.7%
浏览 11
已结题

关于#golang#的问题:数据库的 add_time 自动的时间自动比现在时间少了八小时(相关搜索:连接数据库)

gorm 使用update 方法修改用户名,发现add_time时间变了,比本地少了八小时,但是我连接数据库的时候,已经设置了本地时区 "charset=utf8mb4&parseTime=true&loc=Local",为什么数据库的时间还是不对呢?

img

img

img


数据库的 add_time 自动的时间自动比现在时间少了八小时,为什么呢?

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-04-05 23:46
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    问题的根本在于时区的设置问题。虽然你已经在连接数据库时设置了本地时区``` loc=Local

    1.  **明确问题** :数据库中存储的时间是UTC时间,而不是本地时间。
    2.  **转换时间** :在保存时间之前,将其转换为UTC时间。
    3.  **修改代码** :在使用``` gorm ```进行数据操作时,对时间字段进行转换。
    下面是一个可能的解决方案:
    goCopy code
    

    import (
    "time"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
    )
    // 定义结构体
    type User struct {
    ID uint
    Name string
    AddTime time.Time // 假设这是时间字段
    }
    func main() {
    // 连接数据库
    dsn := "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=true&loc=Local"
    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
    if err != nil {
    panic("failed to connect database")
    }
    // 转换时间
    now := time.Now().UTC() // 获取当前时间的UTC时间
    // 假设需要保存的时间为 now
    // 在保存之前,将其转换为UTC时间
    // 如果要更新时间,也要先将本地时间转换为UTC时间
    // 如:
    // addTime := now.UTC()
    // 更新时间
    // 假设需要更新的用户ID为1
    // 使用Model指定要更新的模型,使用Update更新指定字段
    // db.Model(&User{}).Where("id = ?", 1).Update("add_time", addTime)
    // 关闭数据库连接
    sqlDB, _ := db.DB()
    defer sqlDB.Close()
    }

    ```
    这样做可以确保在保存时间时使用正确的UTC时间,从而解决时间相差八小时的问题。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月14日
  • 已采纳回答 4月6日
  • 创建了问题 4月5日