Goland|Goland 时间转换的那些事
Goland 时间转换的那些事
在项目的开发过程中遇到的一个很有意思的时间转换问题例子
假设有一个需求,是从数据库获取到了一个时间,然后需要把时间延后一天,再返回时间戳
【Goland|Goland 时间转换的那些事】得到伪代码
t := "2022-03-08 23:59:59"
expireTime, _ := time.Parse("2006-01-02 15:04:05", t)
expireTime = expireTime.Add(time.Hour * 24)
fmt.Println(expireTime.Unix())//输出
1646870399
用时间转换的在线网站对
1646870399
进行转换得到2022-03-10 07:59:59
这于我们理想中的2022-03-09 23:59:59有很大差距
那么问题出现在哪里呢?我们看看time.Parse()这个方法的说明
In the absence of a time zone indicator, Parse returns a time in UTC.
就可以知道:在没有时区指示符的情况下,Parse返回UTC时间。
所以得到的打印结果会与理想中有差距
正确的方法
1. 换成time.ParseInLocation来指定时区
t := "2022-03-08 23:59:59"
expireTime, _ := time.ParseInLocation("2006-01-02 15:04:05", t, time.Local)
expireTime = expireTime.Add(time.Hour * 24)
fmt.Println(expireTime.Unix())//输出
1646841599
//转换后,与理想中的答案一样
2022-03-09 23:59:59
2. 在转换成时间戳的时候指定时区
t := "2022-03-08 23:59:59"
expireTime, _ := time.ParseInLocation("2006-01-02 15:04:05", t, time.Local)
expireTime = expireTime.Add(time.Hour * 24)
fmt.Println(expireTime.Local().Unix())//输出
1646841599
//转换后,与理想中的答案一样
2022-03-09 23:59:59
推荐阅读
- R语言指数加权模型EWMA预测股市多变量波动率时间序列
- python解题时间_PTA(Python解答1024 科学计数法/1026 程序运行时间)
- LeetCode|LeetCode 447. Number of Boomerangs 回旋镖个数 时间复杂度O(n2)
- javascript基础数据类型转换教程示例
- 定时取消的时间事件
- 低代码和无代码的注意事项
- 总结的真好
- 其它经验|研究生应如何合理管理时间
- java|Aspose.Words 19.X 文档转换 反编译破解 Crack
- C++中类的转换函数你了解吗