初学 GoLang 遇到的一个关于时间的坑...

首先,我原来一直是写PHP的,关于时间的处理一般都是用Carbon
比如Laravel插入一张文章表,在数据库没建立索引的时候直接使用ORM的create方法即可自动保存updated_atcreated_at字段,这是因为Laravel的特性在处理
即便PHP原生代码对时间的操作也仅仅使用date('y-m-d H:i:s')就能保存到数据库,而且一般来说不会有什么需要处理的问题。
PHP果然是世界上最好的语言:joy:

在GoLang中一般时间操作都依赖于time

在开发过程中踩了一个PHP从来没踩过的坑,下面是我记录日志的代码

_, _ = models.AddLoginLogs(&models.LoginLogs{
    Username:  admin.Username,
    Type:      1,
    CreatedAt: time.Now(),
    UpdatedAt: time.Now(),
})

这是Laravel迁移时生成的数据库,直接拿来用了

在运行这段代码后发现保存到数据库的值和实际时间不对,然后我再运行一遍。。。。。。在试一下。。。。。。???

我的第一反应是需要设置时区,然后习惯性的打开百度,得到了解决方式一

修改代码如下

loc, _:=time.LoadLocation("Asia/Shanghai")
_, _ = models.AddLoginLogs(&models.LoginLogs{
    Username:  admin.Username,
    Type:      1,
    CreatedAt: time.Now().In(loc),
    UpdatedAt: time.Now().In(loc),
})

再次运行发现还是不对,各种百度仍然没有解决,快放弃时无意间发现一篇文章:文章链接

仔细对比一下还真是差了8小时,恍然大悟,然后修改了Mysql连接池代码的确解决了

初学GoLang遇到的一个关于时间的坑...

真是被我自己蠢哭了…

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 3

原来 loc=Local 是这个啊,学习了,我也一直没注意,只知道别人都这么写我也这么写。。哈哈哈

3年前 评论

Go时间还有个坑

d, _ := time.Parse("2006-01-02", "2020-01-31")
d = d.AddDate(0, 1, 0)
fmt.Println(d.Format("2006-01-02"))

加了一个月,猜猜会变成多少

3年前 评论
caoayu 3年前
pibigstar (作者) 3年前
caoayu 3年前
pibigstar (作者) 3年前
caoayu 3年前
pibigstar (作者) 3年前
caoayu 3年前
pibigstar (作者) 3年前
caoayu 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!