问题复现
期望查询结果时区使用本机的默认时区(东八区):
2024-06-05 04:43:54 +0800 CST
实际查询结果(UTC):
2024-06-04 20:43:54 +0000 UTC
如何解决
问题是通过gorm查询mysql数据库时做了转化,转化的过程中默认使用的时区:UTC,需要在配置Data Source Name (DSN)时,设置相应的参数,进行重写覆盖,使用自己的时区。
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 {
    log.Fatal(err)
}
参数:
- parseTime 
  - 解析时间,设置为true,将数据库中的时间值解析为 time.Time类型。
 
- 解析时间,设置为true,将数据库中的时间值解析为 
- loc 
  - 设置时区,例如,loc=UTC 或者 loc=Local
 
- 设置时区,例如,
源代码
1、结构体:Config是一个从DSN字符串解析的配置。
go/pkg/mod/github.com/go-sql-driver/mysql@v1.7.0/dsn.go:36

2、如果没有解析到相关字段,那么使用默认值:

3、实例化对象

4、当config.DSN 不为空,那么开始解析字符串为结构体

5、覆盖默认值

总结
通过DSN可以修改时区,如果不传loc该参数,那么默认值是UTC。
最终期望值和实际输出值一致,完美!!!

我为人人,人人为我,美美与共,天下大同。







![[next.js]pwa缓存](https://img-blog.csdnimg.cn/direct/ed5bbe509c254d37be7e153217f6212e.png)











