美文网首页云计算
Go 模板中的 时间 格式化

Go 模板中的 时间 格式化

作者: 梅_梅 | 来源:发表于2018-10-16 00:21 被阅读2次

    1. 概念

    如果有人问你说现在几点? 你看了看表回答他说晚上8点了. 这样回答看上去没有什么问题,但是如果问你的这个人在欧洲的话那么你的回答就会让他很疑惑,因为他那里还太阳当空呢.
    这里就有产生了一个如何定义时间的问题. 因为在地球环绕太阳旋转的24个小时中,世界各地日出日落的时间是不一样的.所以我们才有划分时区(timezone) 的必要,也就是把全球划分成24个不同的时区. 所以我们可以把时间的定义理解为一个时间的值加上所在地的时区(注意这个所在地可以精确到城市)
    地理课上我们都学过格林威治时间(GMT), 它也就是0时区时间. 但是我们在计算机中经常看到的是UTC. 它是Coordinated Universal Time的简写. 虽然可以认为UTC和GMT的值相等(误差相当之小),但是UTC已经被认定为是国际标准,所以我们都应该遵守标准只使用UTC
    那么假如现在中国当地的时间是晚上8点的话,我们可以有下面两种表示方式

    20:00 CST
    12:00 UTC
    

    这里的CST是Chinese Standard Time,也就是我们通常所说的北京时间了. 因为中国处在UTC+8时区,依次类推那么也就是12:00 UTC了.
    为什么要说这些呢?
    第一,不管通过任何渠道我们想要同步系统的时间,通常提供方只会给出UTC+0的时间值而不会提供时区(因为它不知道你在哪里).所以当我们设置系统时间的时候,设置好时区是首先要做的工作
    第二,很多国家都有夏令时(我记得小时候中国也实行过一次),那就是在一年当中的某一天时钟拨快一小时(比如从UTC+8一下变成UTC+9了),那么同理到时候还要再拨慢回来.如果我们设置了正确的时区,当需要改变时间的时候系统就会自动替我们调整。

    2. 例子

    Golang的模版注入,可以向模版中注入数据,并最终生成注入后的结果。但对于时间数据因为注入的是标准时间UTC,因此时间的显示过程就存在根据时区做本地化的显示转换.

    例如
    注入数据:

     type Post struct {
            Id        int
            Title     string
            CreatedOn time.Time //时间
     }
    

    模版

    <span>{{ .CreatedOn }}</span>
    <span>{{ .CreatedOn.Format "2006 Jan 02" }}</span>
    <span>{{ .CreatedOn.Format "Jan 02, 2006" }}</span>
    <span>{{.CreatedOn.Format "Jan 02, 2006 15:04:05 UTC" }}</span>
    

    那么输出是

    2015-04-04 20:51:48 
    2015 Apr 04 
    Apr 04, 2015 
    Apr 04, 2015 20:51:48 UTC
    

    相同的时间戳展示出不同的时间,是通过Format 中的字符串选定时域完成的。

    golang 中可选的时间域集合可以参考标准库的format.go文件

    const (
        ANSIC       = "Mon Jan _2 15:04:05 2006"
        UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
        RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
        RFC822      = "02 Jan 06 15:04 MST"
        RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
        RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
        RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
        RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
        RFC3339     = "2006-01-02T15:04:05Z07:00"
        RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
        Kitchen     = "3:04PM"
        // Handy time stamps.
        Stamp      = "Jan _2 15:04:05"
        StampMilli = "Jan _2 15:04:05.000"
        StampMicro = "Jan _2 15:04:05.000000"
        StampNano  = "Jan _2 15:04:05.000000000"
    )
    
    

    相关文章

      网友评论

        本文标题:Go 模板中的 时间 格式化

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