【踩坑】解决Gorm向数据库写入当前时间不正确的问题

前言

解决Gorm向数据库中,向数据表的DATATIME类型字段,从Go语言中写入time.Time类型的当前时间时,秒钟不正确的问题

原因

  • Go语言的time.Time类型保存纳秒值,当纳秒值超过0.5秒时,就会四舍五入进1位,导致实际存入数据库中的秒钟值比Go语言中的time.Time类型通过Second()方法获取的秒钟值多1秒

解决问题

  • 可以舍弃纳秒值,就能保证不会四舍五入
1
2
3
4
5
6
7
8
// 获取当前时间
var nowTime time.Time = time.Now()
// 获取纳秒
var nowTimeNanosecond int = nowTime.Nanosecond()
var nowTimeNanosecondWithUnitString string = fmt.Sprintf("-%dns", nowTimeNanosecond)
var nowTimeNanosecondWithUnitTime, _ = time.ParseDuration(nowTimeNanosecondWithUnitString)
// 将时间去除纳秒值
nowTime = nowTime.Add(nowTimeNanosecondWithUnitTime)

完成