前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 中 time.Parse() 的1个坑

Go 中 time.Parse() 的1个坑

作者头像
王小明_HIT
发布2023-09-07 09:16:20
2450
发布2023-09-07 09:16:20
举报
文章被收录于专栏:程序员奇点程序员奇点

time.Parse()

time.Parse()要慎用,Parse出来的是UTC时间,尽量用time.ParseInLocation()得到CST时间,因为我们通过time.Now()获取的都是CST时间,如果用time.Before()或者time.After()来比较两者,可能会出现预期外的比较结果。例子:

代码语言:javascript
复制
package main

import (
    "log"
    "time"
)

func main() {
    now := time.Now()
    log.Printf("now: %v", now)

    todayZero, _ := time.Parse("20060102", now.Format("20060102"))
    log.Printf("todayZero: %v", todayZero)

    // 当日0点30
    beginTime := todayZero.Add(30 * time.Minute)
    log.Printf("beginTime: %v", beginTime)

    // 当日4点
    endTime := todayZero.Add(4 * time.Hour)
    log.Printf("endTime: %v", endTime)

    // 假设此时为北京时间10:00,则会导致输出true,但实际并不符合预期
    if now.After(beginTime) && now.Before(endTime) {
        log.Printf("true")
    } else {
        log.Printf("false")
    }
}

如果没有指定时区,Parse 方法以UTC返回时间

UTC是什么?

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,使用一个统一的时间,称为通用协调时(UTC, Universal Time Coordinated)。UTC与格林尼治平均时(GMT, Greenwich Mean Time)一样,都与英国伦敦的本地时相同。北京时区是东八区,领先UTC八个小时。

代码语言:javascript
复制
UTC + 时区差 = 本地时间

举个例子看下面的代码

代码语言:javascript
复制
func main() {
 now := time.Now()
 st := now.Format("2006-01-02 15:04:05")
 fmt.Printf("%s\n", st)

 fmt.Println(now.Unix())
 
 t, _ := time.Parse("2006-01-02 15:04:05", st)
 fmt.Println(t.Unix())

 tt := time.Unix(t.Unix(), 0)
 fmt.Println(tt.Format("2006-01-02 15:04:05"))
}

执行结果:

代码语言:javascript
复制
2023-08-13 21:17:52
1691932672
1691961472
2023-08-14 05:17:52

可以看到,当前时间比 UTC 时间晚 8小时

要解决这个问题,需要使用 ParseInLocation 方法设置时区:

代码语言:javascript
复制
var LOC, _ = time.LoadLocation("Asia/Shanghai")
t, _ := time.ParseInLocation("2006-01-02 15:04:05", st, LOC)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • time.Parse()
    • UTC是什么?
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档