美文网首页
【Golang】time的时区问题

【Golang】time的时区问题

作者: 冉小妹Ran | 来源:发表于2020-03-26 16:56 被阅读0次

    先上代码

    package main
    
    import (
        "fmt"
        "time"
    )
    
    var (
        layout    string = "2006-01-02 15:04:05"
        startTime string = "2020-03-25 17:00:00"
        endTime   string = "2020-03-25 19:00:00"
    )
    
    func main() {
        start, _ := time.Parse(layout, startTime)
        fmt.Printf("initTime is %v\n", start)
        //initTime is 2020-03-25 17:00:00 +0000 UTC
    
        end, _ := time.Parse(layout, endTime)
        fmt.Printf("end is %v\n", end)
        //end is 2020-03-25 19:00:00 +0000 UTC
    
        e := end.Unix()
        fmt.Printf("e is %v\n", e)
        //e is 1585162800
    
        fmt.Printf("now is %v\n", time.Now())
        //now  is 2020-03-26 16:34:53.1912054 +0800 CST m=+0.002021101
    
        fmt.Printf("now is %v\n", time.Now().Unix())
        //now  is 1585212169
    }
    

    代码分析

    1. start 和 end是两个时间字符串,并且没有显式声明时区。
      当使用time.Parse去解析start和end两个时间字符串的时候,会默认按照UTC时区去解析。
      所以可以看到输出的结果在后面会有一个UTC,表示是UTC时间。
    2. end.Unix(),返回end的时间戳1585162800,在Unix时间戳工具里面查询,可以看到1585162800对应的是2020/3/26 3:0:0。
      原因:我的电脑的时区是东八区(也就是北京时间),endTime="2020-03-25 19:00:00"是UTC时间,对应到我们本地时间自然要加8个小时,也就是2020/3/26 3:0:0。
    3. time.Now(),可以看到,输出的结果后面有 +0800 CST,这个就表示东八区的时间。

    总结
    时区问题是很容易被忽视的问题。今天在写项目的时候就被时区问题block了很长时间。
    建议使用时间的时候尽量统一使用UTC时间,能够避免很多问题。

    相关文章

      网友评论

          本文标题:【Golang】time的时区问题

          本文链接:https://www.haomeiwen.com/subject/bpvcuhtx.html