关于go-zero时区问题会出现在2处
1、在rpc的项目中etc中的yaml,sql的链接字符串会指定一个时区
2、在部署服务时go的time.local会读取服务器时区(k8s pod可重新指定镜像时区)
首先我们了解一下标准时区
GMT与UTC概念:https://blog.csdn.net/qq_43713303/article/details/106764589

在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,仅此!
方式一:
传入参数 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)