【go-zero】go 时间字符串转换为时间戳 MYSQL场景下 时区问题详解
关于go-zero时区问题会出现在2处1、在rpc的项目中etc中的yaml,sql的链接字符串会指定一个时区2、在部署服务时go的time.local会读取服务器时区(k8s pod可重新指定镜像时区)
关于go-zero时区问题会出现在2处
1、在rpc的项目中etc中的yaml,sql的链接字符串会指定一个时区
2、在部署服务时go的time.local会读取服务器时区(k8s pod可重新指定镜像时区)
1、认识时区
首先我们了解一下标准时区
GMT与UTC概念:https://blog.csdn.net/qq_43713303/article/details/106764589
2、RPC项目中的yaml
在yaml字符串中配置如下
Datasource: 数据库连接/数据库名?parseTime=true&charset=utf8&loc=Asia%2fShanghai
在最后有2个后缀我们需要了解一下
parseTime=true
loc=Asia%2fShanghai
这个说明我们从mysql(注意:这里仅限mysql场景下
)取出的时间字符串(datetime类型,存储的值为:2022-07-28 11:07:20)会拼接上定义的loc
,最后输出的字符串为 2022-07-28 11:07:20 +0800 UTC
为什么会拼接 +0800 UTC ?
因为我们制定了loc的时区为Asia/shanghai,仅此!
3、将含有时区的字符串转为时间戳
方式一:
传入参数 timeStr为:2022-07-28 11:07:20 +0800 UTC
字符串
使用如下的方式进行转化
最后的time.Local为获取服务器时间(或pod指定时间)
expire, err := time.ParseInLocation("2006-01-02 15:04:05 -0700 MST", timeStr, time.Local)
这里 2006-01-02 15:04:05 -0700 MST
其实都是格式化的占位符
类似yyyy-MM-dd hh:mm:ss
+ -0700 MST
这样的站位方式
解释一下-0700 MST
:就是世界0时区
方式二:
传入参数 timeStr为:2022-07-28 11:07:20
字符串
使用如下的方式进行转化
expire, err := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
更多推荐
所有评论(0)