在Go中,时间操作需要导入time包。

import "time"

获取当前时间

package main

import (
    "fmt"
    "time"
)

func main() {
	// 获取当前时间
	t := time.Now()
	fmt.Printf("now=%v\n", t)
    
    /*
        time.Now() 返回类型为time.Time
        查看time包下面的Time是结构体,该结构体包含一些方法(只列出其中一些)
    */
	fmt.Printf("year=%v\n", t.Year())        // 年
	fmt.Printf("month=%v\n", t.Month())      // 月(英文格式)
	fmt.Printf("month=%v\n", int(t.Month())) // 月(int强转为数字格式)
	fmt.Printf("day=%v\n", t.Day())          // 日
	fmt.Printf("hour=%v\n", t.Hour())        // 时
	fmt.Printf("minute=%v\n", t.Minute())    // 分
	fmt.Printf("second=%v\n", t.Second())    // 秒
	fmt.Printf("时间戳=%v\n", t.Unix())         // 时间戳(秒)
	fmt.Printf("时间戳=%v\n", t.UnixNano())     // 时间戳(纳秒)
	fmt.Printf("周几=%v\n", t.Weekday())       // 周几(英文格式)
	fmt.Printf("周几=%v\n", int(t.Weekday()))  // 周几(int强转为数字格式)
}

/*
    输出:
    now=2021-11-02 10:03:14.1890599 +0800 CST m=+0.008279001
    year=2021
    month=November
    month=11
    day=2
    hour=10
    minute=3
    second=14
    时间戳=1635818594
    时间戳=1635818594189059900
    周几=Tuesday
    周几=2
*/

格式化日期

package main

import (
	"fmt"
	"time"
)

func main() {
	t := time.Now()
	/*
		格式化时间使用  T.Format()
		其中2006-01-02 15:04:05是格式化的标准格式
        可以理解为占位符 年(2006) 月(01/1) 日(02/2) 时(15/3) 分(04/4) 秒(05/5)
        每个占位符中间可以使用符号比如"-","/"等,也可以什么都不加直接连接在一起
	*/
	fmt.Printf("%v\n", t.Format("2006-01-02 15:04:05"))
	fmt.Printf("%v\n", t.Format("2006-01-02"))
	fmt.Printf("%v\n", t.Format("2006-1-2")) // 占位符月日不带0,格式化后的小于10的月日也不带0
	fmt.Printf("%v\n", t.Format("01"))
}

/*
    输出:
    2021-11-02 11:22:20
    2021-11-02
    2021-11-2
    11
*/

时间戳转日期格式

package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		1、把时间戳转使用time.Unix()转化为 time.Time 类型时间
		2、使用 Format() 方法格式化
	*/
	fmt.Printf("%v\n", time.Unix(1635818594, 0).Format("2006/01/02 15:04:05"))
}

/*
    输出
    2021/11/02 10:03:14
*/

日期转为时间戳

package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		1、设置时区
		2、time.ParseInLocation() 返回time.Time类型
	*/
	Loc, _ := time.LoadLocation("Asia/Shanghai")

	// 格式 2006-01-02, 待转化日期 2021-11-02
	t1, err := time.ParseInLocation("2006-01-02", "2021-11-02", Loc)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Printf("%v\n", t1.Unix())
	}
}

/*
    输出:
    1635782400
*/

多少时间之前或之后

package main

import (
	"fmt"
	"time"
)

func main() {
	/*
		使用Time结构体上的Add()方法
		Add方法接收 time.Duration类型参数
	*/
    // 一天后
	fmt.Printf("%v\n", time.Now().Add(time.Hour*24).Format("2006/01/02 15:03:04"))
    // 一天前 
	fmt.Printf("%v\n", time.Now().Add(-time.Hour*24).Format("2006/01/02 15:03:04"))
}

/*
    输出:
    2021/11/03 13:01:18
    2021/11/01 13:01:18
*/