其他分享
首页 > 其他分享> > Go语言基础之time包

Go语言基础之time包

作者:互联网

时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。

 

时间类型

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

time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下:

func timeDemo()  {
    now := time.Now() // 获取当前时间
    fmt.Printf("current time :%v\n", now)
    year := now.Year()
    mouth := now.Month()
    day := now.Day()
    hour := now.Hour()
    minute := now.Minute()
    second := now.Second()
    fmt.Println(year, mouth, day, hour, minute, second)
}

 

时间戳

时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳(UnixTimestamp)。

基于时间对象获取时间戳的示例代码如下:

// 时间戳

func timestampDemo()  {
    now := time.Now()
    timestamp1 := now.Unix() // 时间戳
    timestamp2 := now.UnixNano() // 时间戳
    fmt.Println(timestamp1)
    fmt.Println(timestamp2)

}

 

使用time.Unix()将时间戳转换为时间 格式 

func timestampDemo2(timestamp int64) {
    timeObj := time.Unix(timestamp, 0)
    fmt.Println(timeObj)

    year := timeObj.Year()     //年
    month := timeObj.Month()   //月
    day := timeObj.Day()       //日
    hour := timeObj.Hour()     //小时
    minute := timeObj.Minute() //分钟
    second := timeObj.Second() //秒
    fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

 

时间间隔

time.Durationtime包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最长时间段大约290年。

// 时间间隔
    fmt.Println(time.Second)
    // sleep多少秒
    time.Sleep(2 * time.Second)
    fmt.Println("时间过去了2s")

    // now + 24小时
    fmt.Println(now.Add(24 * time.Hour))

 

时间操作

package main

import (
    "fmt"
    "time"
)

func f1() {
    now := time.Now()
    fmt.Println(now)
    fmt.Println(now.Year())
    fmt.Println(now.Month())
    fmt.Println(now.Day())
    fmt.Println(now.Hour())
    fmt.Println(now.Minute())
    fmt.Println(now.Second())
    // 时间戳
    fmt.Println(now.Unix())
    fmt.Println(now.UnixNano())
    // time.Unix()
    ret := time.Unix(1620873991, 0)
    fmt.Println(ret)
    fmt.Println(ret.Year())
    fmt.Println(ret.Day())
    // 时间间隔
    fmt.Println(time.Second)
    // sleep多少秒
    time.Sleep(2 * time.Second)
    fmt.Println("时间过去了2s")

    // now + 24小时
    fmt.Println(now.Add(24 * time.Hour))
    // 时间相减
    nextYear, err := time.Parse("2006-01-02 03:04:05", "2021-05-13 10:55:20")
    if err != nil {
        fmt.Printf("Pase time failed err:%v", err)
        return
    }
    now = now.UTC()
    d := nextYear.Sub(now)
    fmt.Println(d)
    fmt.Println("---------------------")
    fmt.Println(now.Format("2006-01-02"))
    fmt.Println(now.Format("2006-01-02 15:04:05 "))
    fmt.Println(now.Format("2006-01-02 03:04:05 AM"))
    fmt.Println(now.Format("2006-01-02 15:04:05 PM"))

    timeObj, err := time.Parse("2006-01-02", "2021-05-13")
    if err != nil {
        fmt.Printf("parse time failed, err:%v", err)
        return
    }
    fmt.Println(timeObj)
    fmt.Println(timeObj.Unix())
}

// 时区

func f2() {
    now := time.Now() // 本地时间
    fmt.Println(now)
    // 明天的这个时间
    // 按照指定格式去解析一个字符串格式时间
    //timeObj, err := time.Parse("2006-01-02 03:04:05", "2021-05-14 11:08:20")
    //if err != nil {
    //    fmt.Printf("time pase failed err:%v", err)
    //    return
    //}
    //fmt.Println(timeObj)

    loc, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        fmt.Printf("local loc failed err:%v\n", err)
        return
    }

    // 按照指定时区解析时间
    timeObj, err := time.ParseInLocation("2006-01-02 03:04:05", "2021-05-13 11:33:30", loc)
    if err != nil {
        fmt.Printf("parse time failed,  err:%v\n", err)
        return
    }
    fmt.Println(timeObj)

    time_delta := timeObj.Sub(now)
    fmt.Println(time_delta)

}

func f3()  {
    now := time.Now()
    fmt.Println(now)
    fmt.Println(now.Format("2006/01/02 15:04:05"))

}



func main() {
    //f1()
    //f2()
    f3()

}

 

时间格式化

时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用Go的诞生时间2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)。也许这就是技术人员的浪漫吧。

补充:如果想格式化为12小时方式,需指定PM

func formatDemo() {
    now := time.Now()
    // 格式化的模板为Go的出生时间2006年1月2号15点04分 Mon Jan
    // 24小时制
    fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
    // 12小时制
    fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))
    fmt.Println(now.Format("2006/01/02 15:04"))
    fmt.Println(now.Format("15:04 2006/01/02"))
    fmt.Println(now.Format("2006/01/02"))
}

解析字符串格式的时间,且带上时区

func f4()  {
    now := time.Now()
    fmt.Println(now)
    // 加载时区
    loc, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        fmt.Printf("load localtoin failed err:%v", err)
        return
    }

    // 按照指定的时区和指定的格式解析字符串
    timeObj, err := time.ParseInLocation("2006/01/02 15:04:05","2021/05/14 11:08:20", loc)

    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(timeObj)
    fmt.Println(timeObj.Add(10 * time.Second))
}

 

标签:语言,err,fmt,timeObj,Println,time,Go,now
来源: https://www.cnblogs.com/alrenn/p/14764329.html