21-标准库time

4 阅读2分钟

time 标准库

package main

import (
	"fmt"
	"time"
)

func main() {
	now := time.Now() // 时间对象
	fmt.Println(now)  // 2024-11-26 22:35:01.6949755 +0800 CST m=+0.003196901

	year := now.Year()     //年
	month := now.Month()   //月
	day := now.Day()       //天
	hour := now.Hour()     // 时
	minute := now.Minute() //分
	second := now.Second() //秒

	fmt.Println(year, month, day, hour, minute, second)
	//2024 November(12) 26 22 38 16

	// => 时间戳 1970.1.1 到现在的秒数
	unixTime := now.Unix()              // 返回秒数
	unixNamoTime := now.UnixNano()      // 返回纳秒
	fmt.Println(unixTime, unixNamoTime) // 1732632174 1732632174127252600

	// => 时间戳转具体时间
	var t int64 = 1732632174
	fmt.Println(time.Unix(t, 0)) // 2024-11-26 22:42:54 +0800 CST
}

其它方法

package main

import (
	"fmt"
	"time"
)

func main() {
	// => 时间间隔 它代表2个时间点之间经过的时间,以纳秒为单位
	n := 5
	time.Sleep(time.Duration(n) * time.Second) //类型转换 -> 睡5秒

	// => Add 某个时间 + 时间间隔
	now := time.Now()
	// now 1个小时后的时间
	t := now.Add(time.Hour)
	fmt.Println(t)          // 2024-11-26 23:59:30.8066442 +0800 CST m=+3605.007069001
	fmt.Println(t.Sub(now)) //1h0m0s 求2个时间之间的差值

	// => Before: 某个时间点是否在另一个时间点之前
	fmt.Println(now.Before(t)) // true

	// => After: 某个时间点是否在另一个时间点之后
	fmt.Println(t.After(now)) // true

	/*
		时间格式化 ->
		它不是使用Y-   M -D  H: M: S;
		而是     2006 01 02 15 04 05 去表示年月日时分秒
		go 语言的诞生时间
	*/
	fmt.Println(now.Format("2006-01-02"))          //2024-11-26
	fmt.Println(now.Format("2006-01-02 15:04:05")) //2024-11-26 23:13:50
	fmt.Println(now.Format("2006/01/02"))          //2024/11/26
	fmt.Println(now.Format("2006/01/02 15/04/05")) //2024/11/26 23/13/50
	fmt.Println(now.Format("20060102"))            //20241126

	// => 定时器
	for tmp := range time.Tick(5 * time.Second) {
		fmt.Println(tmp) // 5秒执行一次
	}

    	// => 解析字符串类型的时间:需要加载一个时区
	timeStr := "2019/08/09 15:04:05"
	// 1. 拿到时区
	loc, err := time.LoadLocation("Asia/Shanghai")
	if err != nil {
		fmt.Println(err)
		return
	}
	// 2. 根据时区解析字符串时间
	timeObj1, err1 := time.Parse("2006/01/02 15:04:05", timeStr)              // 这个没有时区
	timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", timeStr, loc) //带时区
	if err != nil {
		fmt.Println(err)
		return
	}
	if err1 != nil {
		fmt.Println(err1)
		return
	}
	fmt.Println(timeObj1, timeObj)
	//2019-08-09 15:04:05 +0000 UTC 2019-08-09 15:04:05 +0800 CST
}