以前一直用 int 存储 unix 时间字段,这次和其他组交互时出现在时间问题。长话短说,这和 Python 查询 MySQL 一样,对于 datetime 默认会使用 UTC 时间,但是国内是东八区,也就是 Asia/Shanghai,需要注意时间差8小时。
beego issue441, 中有提到过,具体解决办法就是:

构建 DSN 时增加 loc 指定时区,并区增加对时间的解析。打印出来的 uri:
xiaoju:@tcp(127.0.0.1:3306)/test?charset=utf8&loc=Asia%2FShanghai&parseTime=true
后面的 parseTime 必须要有,用法如下:

这样就可以直接将 MySQL 中的 datetime 类型映射到 golang 中的 time.Time
参考:
https://github.com/go-sql-driver/mysql#timetime-support
https://github.com/astaxie/beego/issues/441
https://github.com/go-sql-driver/mysql/issues/405
https://github.com/go-sql-driver/mysql/issues/203
网友评论