Golang时间转换的那些事

博客 分享
0 162
张三
张三 2022-03-15 17:56:42
悬赏:0 积分 收藏

Golang 时间转换的那些事

Golang 时间转换的那些事

在项目的开发过程中遇到的一个很有意思的时间转换问题

例子

假设有一个需求,是从数据库获取到了一个时间,然后需要把时间延后一天,再返回时间戳

得到伪代码

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 
posted @ 2022-03-15 17:07 小傅啊 阅读(22) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员