Loading

golang time包和日期函数

获取当前时间

	// 获取当前时间对象
	timeObj := time.Now()

	/* 获取当前日期 语法一 */

	// 打印当前日期
	fmt.Println(timeObj) // 2024-02-20 17:50:54.085353 +0800 CST m=+0.000323093
	// 当前年
	year := timeObj.Year()
	// 打印当月
	month := timeObj.Month()
	// 打印当前日
	day := timeObj.Day()
	// 打印当前小时
	hour := timeObj.Hour()
	// 打印当前分
	minute := timeObj.Minute()
	// 打印当前秒
	second := timeObj.Second()

	// 按格式打印日期 // 2024-2-20 17:57:59
	fmt.Printf("%d-%d-%d %d:%d:%d \n", year, month, day, hour, minute, second)
	// 标注日期格式 个位补0输出  2024-02-20 17:59:08
	// %02d中的2表示宽度,整数不够2列就补上0
	fmt.Printf("%d-%02d-%02d %02d:%02d:%02d \n", year, month, day, hour, minute, second)

	/* 获取当前日期 语法二

	go中格式化时间模板不是场景的 y-m-d...
	使用Go的诞生时间 2006年1月2号15点04分
	*/

	// 通过 format格式化输出 24小时制
	// 2024-02-20 18:09:44
	fmt.Println(timeObj.Format("2006-01-02 15:04:05"))
	// 2024/02/20 18:09:44
	fmt.Println(timeObj.Format("2006/01/02 15:04:05"))
	// 18:09:44 2024/02/20
	fmt.Println(timeObj.Format("15:04:05 2006/01/02 "))

	// 通过 format格式化输出 12小时制
	// 2024/02/20 06:09:44
	fmt.Printf(timeObj.Format("2006-01-02 03:04:05"))

获取时间戳及和日期互相转化

	/* 获取当前时间戳 */
	fmt.Println(timeObj.Unix())

	/* 获取纳秒时间戳 */
	fmt.Println(timeObj.UnixNano())

	/* 时间戳转换成日期字符串 */
	// 获取当前时间戳
	unixTime := timeObj.Unix()
	// 通过time获取当前时间戳的时间对象
	obj := time.Unix(int64(unixTime), 0) // Param:秒级的int64的时间戳 , 纳秒的int64时间戳,不用则传0
	// 格式化输出
	fmt.Println(obj.Format("2006-01-02 15:04:05"))

	/* 日期字符串转换为时间戳 */
	nowTimeStr := "2024-01-01 01:01:01"
	// Param:要格式化的时间模板,当前时间字符串,时区(time.Local表示本地时区)
	tObj, _ := time.ParseInLocation("2006-01-02 15:04:05", nowTimeStr, time.Local)
	fmt.Println(tObj)        //  时间对象, 2024-01-01 01:01:01 +0800 CST
	fmt.Println(tObj.Unix()) // 通过时间对象 转换 1704042061

时间间隔

image-20240220183054666

/* 源码定义支持的调用 */
const (
	Nanosecond  Duration = 1
	Microsecond          = 1000 * Nanosecond
	Millisecond          = 1000 * Microsecond
	Second               = 1000 * Millisecond
	Minute               = 60 * Second
	Hour                 = 60 * Minute
)
func main() {
	fmt.Println(time.Second)   // 1s
	fmt.Println(time.Hour * 3) // 3h0m0s

}

时间操作

func main() {

	timeObj := time.Now()

	// 当前时间增加1小时
	fmt.Println(timeObj.Add(time.Hour))

	// 求两个时间对象之间的差值
	// 获取指定时间的时间对象  2024-01-01 00:00:00 +0000 UTC
	t1 := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
	t2 := time.Date(2024, time.January, 2, 0, 0, 0, 0, time.UTC)
	duration1 := t2.Sub(t1) // t2 -t1的间隔  24h0m0s
	fmt.Println(duration1)
	fmt.Println(timeObj.Sub(t2)) // 当前时间-t2的间隔  1186h43m6.808475s

	// 判断两个时间,相等则是true,否则false
	t3 := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
	t4 := time.Date(2024, time.January, 1, 12, 0, 0, 0, time.UTC)

	isEqual := t4.Equal(t3)
	fmt.Println(isEqual)

	// 判断时间是否在对于时间之前,是的话true 否则 false

	t5 := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
	t6 := time.Date(2024, time.January, 2, 12, 0, 0, 0, time.UTC)
	isBefore := t5.Before(t6)
	fmt.Println(isBefore)

	// 判断时间是否在对于时间之后,是的话true 否则 false
	isAfter := t6.After(t5)
	fmt.Println(isAfter)

}

golang定时器

import (
	"fmt"
	"time"
)

func main() {

	/* 间隔定时器 */
	// 定义一个间隔1秒的定时器
	ticker := time.NewTicker(time.Second)

	num := 0

	// 迭代定时器.C
	for t := range ticker.C {
		fmt.Println(t)
		num++

		if num == 5 {
			// 如果执行测试=5,使用Stop终止定时器
			ticker.Stop()
		}

	}

}

posted @ 2024-02-20 19:00  木子七  阅读(28)  评论(0编辑  收藏  举报