老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

GO语言学习之时间格式化

老男孩IT教育

行业新闻

2021年1月18日 14:49

time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

  time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。

  当前时间戳

  获取当前时间、时间戳函数和方法:

func Now() Time

  Now返回当前本地时间。

func (t Time) Unix() int64

  Unix将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位秒)。

func (t Time) UnixNano() int64

  UnixNano将t表示为Unix时间,即从时间点January 1, 1970 UTC到时间点t所经过的时间(单位纳秒)。如果纳秒为单位的unix时间超出了int64能表示的范围,结果是未定义的。注意这就意味着Time零值调用UnixNano方法的话,结果是未定义的。

  代码实现:

package main

import (
    "fmt"
    "time"
)

func main() {
    current := time.Now()
    fmt.Println("当前时间:", current)
    now := current.Unix()
    fmt.Println("当前时间戳:", now)
    nanosecond := time.Now().UnixNano()
    fmt.Println("当前纳秒时间戳:", nanosecond)
}

  格式化时间戳

  格式化时间戳常用函数和方法:

func (t Time) Format(layout string) string

  Format根据layout指定的格式返回t代表的时间点的格式化文本表示。layout定义了参考时间:

2006-01-02 15:04:05
2006年01月02日 15时04分05秒
Mon Jan 2 15:04:05 -0700 MST 2006

  格式化后的字符串表示,它作为期望输出的例子。同样的格式规则会被用于格式化时间。

  2006年1月2日15时04分05秒是Go语言诞生的日子,所以Format方法的硬性规定就是:如果想格式化时间,并且借助Format方法,就必须Go语言的诞生时间做代码时间格式化的模板,如果不符输出时间是不正确的。记忆方法:6-1-2-3-4-5

func Unix(sec int64, nsec int64) Time

  Unix创建一个本地时间,对应sec和nsec表示的Unix时间(从January 1, 1970 UTC至该时间的秒数和纳秒数)。

  nsec的值在[0, 999999999]范围内是合法的。

  一、当前时间格式化,代码实现:

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
    fmt.Println(time.Now().Format("2006年01月02日 15时04分05秒"))
    fmt.Println(time.Now().Format("Mon Jan 2 15:04:05 -0700 MST 2006"))
}

  二、时间戳转str格式化时间,代码实现:

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println(time.Unix(0, 0).Format("2006-01-02 15:04:05"))
    fmt.Println(time.Unix(1502282096, 0).Format("2006年01月02日 15时04分05秒"))
    fmt.Println(time.Unix(1502282096, 0).Format("06-01-02 15:04:05"))
    fmt.Println(time.Unix(1502282096, 0).Format("01-02 15:04"))
}

  格式化时间转时间戳

  格式化时间转时间戳常用函数和方法:

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time

  Date返回一个时区为loc、当地时间为:

year-month-day hour:min:sec + nsec nanoseconds

  month、day、hour、min、sec和nsec的值可能会超出它们的正常范围,在转换前函数会自动将之规范化。

func Parse(layout, value string) (Time, error)

  Parse解析一个格式化的时间字符串并返回它代表的时间。

func ParseInLocation(layout, value string, loc *Location) (Time, error)

  ParseInLocation类似Parse但有两个重要的不同之处。第一,当缺少时区信息时,Parse将时间解释为UTC时间,而ParseInLocation将返回值的Location设置为loc;第二,当时间字符串提供了时区偏移量信息时,Parse会尝试去匹配本地时区,而ParseInLocation会去匹配loc。

  方法一:

package main

import (
    "fmt"
    "time"
)

func main() {
    the_time := time.Date(2017, 8, 9, 12, 34, 56, 0, time.Local)
    unix_time := the_time.Unix()
    fmt.Println(unix_time)
    fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05"))
}

  方法二:

package main

import (
    "fmt"
    "time"
)

func main() {
    // 返回的不是本地时间, 而是 UTC , 会自动加8小时.
    the_time, err := time.Parse("2006-01-02 15:04:05", "2017-08-09 12:34:56")
    if err == nil {
        unix_time := the_time.Unix()
        fmt.Println(unix_time)
        fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05"))
    }
    // 使用time.ParseInLocation 返回本地时间
    the_time, err = time.ParseInLocation("2006-01-02 15:04:05", "2017-08-09 12:34:56", time.Local)
    if err == nil {
        unix_time := the_time.Unix()
        fmt.Println(unix_time)
        fmt.Println(time.Unix(unix_time, 0).Format("2006-01-02 15:04:05"))
    }
}

  获取星期

  获取当前时间星期常用方法:

func (t Time) Weekday() Weekday

  返回时间点t对应的那一周的周几。

func (d Weekday) String() string

  String返回该日(周几)的英文名("Sunday"、"Monday",……)

  代码实现:

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    weeks := now.Weekday().String()
    fmt.Println(weeks)
}

  老男孩教育专注Linux云计算运维工程师、Python全栈+人工智能、Python自动化运维开发、网络安全、数据分析、新媒体运营、MySQLDBA开发、K8S微服务、Go语言等互联网课程培训。欢迎对it行业感兴趣的朋友们来公司考察及学习。

  推荐阅读:

  GO语言学习系列之json交换格式!

  Python运维工程师主要做什么?Python学习班!

  Python学习系列之学Python需要什么软件?

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。