golang xorm 时区问题?请大神指点

2021-01-12 16:32:39 +08:00
 sunshinev

使用 xom 的 created 自动写入创建时间,发现数据库里面的时间 晚了 8 小时

// 这是数据库里面的记录
2021-01-12 08:14:08 

// 这是应该正常的时间
2021-01-12 16:14:08 

然后在服务器上,打印时间相关的信息,发现也都是正常的

log.Printf("time now is %v", time.Now().Format(config.DateTimeLayout))
// 2021-01-12 16:14:08

log.Printf("time e is %+v %+v", *e.TZLocation, *e.DatabaseTZ)
// local 信息比较多,但是显示 name:Local

log.Printf("time is %+v", time.Now().Location())
// local

查看数据库的时区是 CST,也是中国时区

+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+

服务器上 shell,打印出来的时间也是正常的

$ date -R
Tue, 12 Jan 2021 16:31:34 +0800

这么看,好像都是没有问题的,但是就是写入数据库之后,变成了-8 小时

986 次点击
所在节点    问与答
3 条回复
sunshinev
2021-01-12 16:55:23 +08:00
![8ce5ba258afa45a0cefeeb289ae334dc1610441572.jpg]( https://cdn.jsdelivr.net/gh/sunshinev/remote_pics/8ce5ba258afa45a0cefeeb289ae334dc1610441572.jpg)

按照官网的文档说 loc 默认是 UTC 的,那出现这种情况,就只能是
1. 服务器按照 CST 的格式给到 sql 库进行处理
2. sql 库 把传过来的值按照本地的 timezone CST 转换成 loc 的默认 UTC 来处理 就 -8 个小时
3. sql 库把记录写入到数据库,就变成了 服务器也是 CST,数据库也是 CST,但是莫名其妙 减去了 8 个小时
hugo2lee
2021-01-12 17:22:04 +08:00
数据库链接有没有加 loc=Local
lunny
2022-02-25 20:42:05 +08:00
`engine.DatabseTZ =`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/744240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX