抽空把 time 标准包的部分常用基本功能捋了一遍。

时间

获取时间

import (
    "fmt"
    "time"
)

func main() {
    // 获取本地计算机时间
    localTime := time.Now()
    // 2020-08-01 22:08:12.983185 +0800 CST m=+0.000104694
    fmt.Println(localTime)
}

时间格式化

import (
    "fmt"
    "time"
)

func main() {
    localTime := time.Now()
    // 2006-01-02 15:04:05 中的时间不可更改
    formatTime := localTime.Format("2006-01-02 15:04:05")
    fmt.Println(formatTime) // 返回:2020-08-01 22:16:03
}

上面是用-做为分隔符,也可以自定义:

func main() {
    localTime := time.Now()
    // 日、月、小时和分秒,如果可去掉 前导的 0
    formatTime := localTime.Format("2006年1月2日 15点04分05秒")
    fmt.Println(formatTime) // 返回:2020年8月1日 22点58分07秒
}

只获取指定部分:

import (
    "fmt"
    "time"
)

func main() {
    localTime := time.Now()

    // 分别返回年月日
    fmt.Println(localTime.Year())
    fmt.Println(localTime.Month())
    fmt.Println(localTime.Day())
    // 返回时分秒
    fmt.Println(localTime.Hour())
    fmt.Println(localTime.Minute())
    fmt.Println(localTime.Second())
    // 返回周
    fmt.Println(localTime.Weekday())
}

时区

查看时区

import (
    "fmt"
    "time"
)

func main() {
    localTime := time.Now()
    // 返回 CST 28800(时区及 UTC 偏移量)
    fmt.Println(localTime.Zone())
    // 需要 tzdata 支持
    time.LoadLocation("Local")
}

指定时区

import (
    "fmt"
    "time"
)

func main() {
    localTime := time.Now()
    // 8*60*60 也可用 int((8 * time.Hour).Seconds()) 表示
    cusZone := time.FixedZone("UTC+8", 8*60*60)
    cusTime := localTime.In(cusZone)
    fmt.Println(cusTime)
}

时间戳

查看时间戳

import (
    "fmt"
    "time"
)

func main() {
    currTime := time.Now()
    // 秒
    unixTime := currTime.Unix()
    // 纳秒
    unixNanoTime := currTime.UnixNano()
}

上面的示例其实是把当前的时间转为时间戳,也可以把指定的时间转为时间戳:

func main() {
    cusZone := time.FixedZone("UTC+8", 8*60*60)
    // 2020-12-11 10:09:08.000000007 +0800 UTC+8
    timeDate := time.Date(2020, 12, 11, 10, 9, 8, 7, cusZone)
    unixTime := timeDate.Unix() // 返回 1607652548
}

时间戳转时间字符串

import (
    "fmt"
    "time"
)

func main() {
    currUnixTime := Time.Now().Unix()
    currTime := Time.Unix(currUnixTime, 0)
    // 2020-08-01 00:11:22 +0800 CST
    fmt.Println(currTime)
}

时间运算

import (
    "fmt"
    "time"
)

func main() {
    currTime := time.Now()
    // 时间相加,可改用负数做减法
    fmt.Println(currTime.Add(time.Second * 10)) // 加 10秒
    fmt.Println(currTime.Add(time.Minute * 10)) // 10分钟
    fmt.Println(currTime.Add(time.Hour * 10))   // 10小时
    fmt.Println(currTime.Add(time.Hour * 24 * 10)) // 10天

    // 日期相加
    fmt.Println(currTime.AddDate(1, 2, 3))

    // 时间相减,结果以小时计
    subTime := currTime.Add(time.Hour * 10).Sub(currTime)
	fmt.Println(subTime) // 返回 10h0m0s
}

参考