time包

时间类型 time.Time

时间间隔类型 time.Duration

package time

import (
	"fmt"
	"testing"
	"time"
)

func TestTime(t *testing.T) {
	now := time.Now()
	fmt.Println(now)
	fmt.Println(now.Year())
	fmt.Println(now.Month())
	fmt.Println(now.Day())
	fmt.Println(now.Date())
	fmt.Println(now.Hour())
	fmt.Println(now.Minute())
	fmt.Println(now.Second())
}

// 时间戳
func TestTimeStamp(t *testing.T) {
	now := time.Now()
	fmt.Println(now.Unix())
	fmt.Println(now.UnixNano())
	//time.Unix()转换时间戳
	res := time.Unix(1264803667, 0)
	fmt.Println(res.Year())
	fmt.Println(res.Date())
}

// 时间操作
func TestTimeFunction(t *testing.T) {
	now := time.Now()
	// +24h
	fmt.Println(now.Add(24 * time.Hour))
	ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器
	for i := range ticker {
		fmt.Println(i) //每秒都会执行的任务
	}
}

// 时间格式化
func TestTimeFormat(t *testing.T) {
	now := time.Now()
	//格式化的模板为Go的出生时间2006年1月2号15点04分 2006 1 2 3 4
	//24小时制
	fmt.Println(now.Format("2006-01-02 15:04:05"))
	fmt.Println(now.Format("2006/01/02 15:04:05"))
	fmt.Println(now.Format("2006/01/02"))
	fmt.Println(now.Format("15:04:05"))

	//12小时制
	fmt.Println(now.Format("2006-01-02 03:04:05 PM"))
	fmt.Println(now.Format("2006/01/02 03:04:05 PM"))
	fmt.Println(now.Format("2006/01/02 1 2 3"))
	fmt.Println(now.Format("03:04:05 PM"))
}

// 按照对应的格式解析字符串格式的时间
func TestParseTime(t *testing.T) {
	timeStr := "2020-11-25 15:04:05"
	timeObj, err := time.Parse("2006-01-02 15:04:05", timeStr)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(timeObj)
}

// Sub()函数计算两个时间的差值
func TestSub(t *testing.T) {
	now := time.Now()
	// 两个时间相减
	// 24小时
	fmt.Println(now.Sub(now.Add(24 * time.Hour)))
	// 1小时
	fmt.Println(now.Sub(now.Add(1 * time.Hour)))
	// 1分钟
	fmt.Println(now.Sub(now.Add(1 * time.Minute)))
	// 1秒
	fmt.Println(now.Sub(now.Add(1 * time.Second)))
}

// 时区
func TestTimeZone(t *testing.T) {
	// 1.获取本地时区
	loc, err := time.LoadLocation("Local")
	if err != nil {
		fmt.Println(err)
		return
	}
	// 2.获取本地时间
	now := time.Now().In(loc)
	fmt.Println("本地时间:", now)
	// 3.获取UTC时间
	utc := time.Now().UTC()
	fmt.Println("UTC时间:", utc)
	// 4.按照指定时区获取时间
	// 4.1获取东八区时区
	loc1, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("东八区时间:", now.In(loc1))
	// 4.2获取东九区时区
	loc2, err := time.LoadLocation("Asia/Tokyo")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("东九区时间:", now.In(loc2))
	fmt.Println("东八区当前时间减东九区当前时间", time.Now().In(loc1).Sub(time.Now().In(loc2))) //结果为0,因为Sub在计算时会将时区转换为UTC
	// 5.按照指定时区格式化时间
	timeObj, err := time.ParseInLocation("2006-01-02 15:04:05", "2022-12-16 21:26:05", loc2)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println("当前时间用东九区格式化与当前时间相减", timeObj.Sub(time.Now())) //结果为1h
}