golang 保存时间到数据库会多出来八小时

在golang 保存时间字符串转为时间格式后保存多出8小时

初步排查可能mysql数据库服务器时间问题

show variables like'%time_zone';

// outpot
Variable_name`, `Value`
'system_time_zone', 'CST'
'time_zone', 'SYSTEM'
进入服务查看
date
# outpout
Tue May 31 14:47:19 CST 2022

时间区间是对 东八区

由于我们数据层 和 业务层分离

  • 数据层接受前端参数 字符串
  • 字符串传入rpc 传入 数据层
  • 数据层写入数据库
直接在数据层测试写入数据 发现时间会改变 断定是 golang str to time 转换出了问题

网上说查看数据库链接时候设置时区

args := fmt.Sprintf("%s:%s@(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
		conf.Cfg.Mysql.User,
		conf.Cfg.Mysql.Password,
		conf.Cfg.Mysql.IP,
		conf.Cfg.Mysql.Port,
		conf.Cfg.Mysql.Name,
	)
// user:password@(localhost)/dbname?charset=utf8&parseTime=True&loc=Local
conn, err := gorm.Open("mysql", args)
### 设置后任然无效

处理方式

time.ParseInLocation("2006-01-02 15:04:05", endTime, time.FixedZone("CST", 8*3600))
posted @ 2022-05-31 14:54  vx_guanchaoguo0  阅读(656)  评论(0编辑  收藏  举报