当前位置: 首页 > news >正文

golang time包和日期函数

1.简介

在程序中日期和时间是我们经常会用到的,在go中time包提供了时间的显示和测量函数。

2.获取当前时间 

通过time.Now()函数获取当前时间对象,然后获取时间对象的年月日时分秒等值。

    now := time.Now()
	fmt.Printf("now=%v type=%T\n", now, now)
    fmt.Println("年:", now.Year())
	fmt.Println("月:", int(now.Month()))
	fmt.Println("月:", now.Month())
	fmt.Println("日:", now.Day())
	fmt.Println("时:", now.Hour())
	fmt.Println("分:", now.Minute())
	fmt.Println("秒:", now.Second())

结果:注意now.Month() 返回的是March ,int(now.Month())返回的是阿拉伯数字3.

now=2025-03-14 16:45:06.0905758 +0800 CST m=+0.002147901 type=time.Time
年: 2025
月: 3
月: March
日: 14
时: 16
分: 45
秒: 6

3.格式化日期

方法一:%02d表示宽度为2,如果宽度不足2就补上0.

    now := time.Now()
	timeFormat := fmt.Sprintf("%d-%02d-%02d %02d:%02d:%02d\n", now.Year(), now.Month(),                     now.Day(), now.Hour(), now.Minute(), now.Second())
	fmt.Println(timeFormat) //2025-03-14 17:41:57

方法二:Format方法格式化输出日期字符串

    now := time.Now()   
    fmt.Println(now.Format("2006-01-02 03:04:05")) //2025-03-14 05:46:50
	fmt.Println(now.Format("2006/01/02 03:04:05")) //2025/03/14 05:46:50
	fmt.Println(now.Format("03:04:05"))            //05:46:50
	fmt.Println(now.Format("2006-01-02 15:04:05")) //2025-03-14 17:46:50

注意:2006年1月2好15点04分为格式模板,传言时golang出生的日子。

24小时制:15:04:05

12小时制:03:04:05

4.获取当前的时间戳

时间戳时字1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。

    now := time.Now()
	//获取当前时间戳
	fmt.Println(now.Unix())      //秒  1741946106
	fmt.Println(now.UnixMilli()) //毫秒  1741946106150
	fmt.Println(now.UnixMicro()) //微秒  1741946106150703
	fmt.Println(now.UnixNano())  //纳秒  1741946106150703600

5.把指定日期转换成时间戳

//	指定日期转时间戳
	time1 := "2024-02-02 15:02:03"  //指定字符串
	timeTemPlate := "2006-01-02 15:04:05" //转换模板
	t, _ := time.ParseInLocation(timeTemPlate, time1, time.Local)
	fmt.Println(t.Unix()) //1706857323

6.把时间戳转换成日期

	var sec int64 = 1741924654
	sectime := time.Unix(sec, 0)                       //秒转日期对象,第二个参数写0
	fmt.Println(sectime.Format("2006/01/02 03:04:05")) //2025/03/14 11:57:34
	var nsec int64 = 1741946106150703600
	nsecTime := time.Unix(0, nsec)//纳秒转日期对象,第一个参数写0
	fmt.Println(nsecTime.Format("2006/01/02 03:04:05")) //2025/03/14 05:55:06

7.时间戳操作函数

    //add 我们在日常的编程过程中可能会遇到要求时间+时间间隔后的需求,go语言提供了add方法
	now := time.Now()
	later := now.Add(time.Hour * 24)
	fmt.Printf("当前时间%v号,24小时后的时间%v号\n", now.Day(), later.Day()) //当前时间14号,    24小时后的时间15号
	//求两个时间之间的差
	fmt.Println(later.Sub(now))
	//判断连个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确的比较。
	//本方法和用t==u不同,这种方法还会比较地点和时区信息。
	fmt.Println(later.Equal(now))
	//判断是否在该时间点之前,bool
	fmt.Println(later.Before(now))
	//判断是否在该时间点之后,bool
	fmt.Println(later.After(now))

8.定时器 

方式一:使用time.NewTicker(时间间隔)来设置定时器

    ticker := time.NewTicker(time.Millisecond * 100) //0.1秒执行一次
	n := 0
	for i := range ticker.C {
		fmt.Println(i)
		n++
		if n > 3 {
			ticker.Stop()
			break
		}
	}
	fmt.Println("结束了")

结果:

2025-03-15 16:15:09.8342347 +0800 CST m=+0.107599401
2025-03-15 16:15:09.9436426 +0800 CST m=+0.217007301
2025-03-15 16:15:10.0378554 +0800 CST m=+0.311220101
2025-03-15 16:15:10.13826 +0800 CST m=+0.411624701
结束了

方式二:time.Sleep(time.Second)来实现定时器

    n := 0
	for {
		n++
		fmt.Println("执行定时任务")
		time.Sleep(time.Second)//1秒执行一次
		if n > 5 {
			break
		}
	}
	fmt.Println("结束了")

结果:

执行定时任务
执行定时任务
执行定时任务
执行定时任务
执行定时任务
执行定时任务
结束了

相关文章:

  • ​​​​​​​大语言模型安全风险分析及相关解决方案
  • 蓝桥杯嵌入式赛道复习笔记1(led点亮)
  • Python实现限流算法
  • 使用-v选项查看编译器详细搜索路径(g++示例)g++ -v -c main.cpp 发现自定义路径没有被包含怎么办
  • 如何用Deepseek制作流程图?
  • 数据结构---堆栈和列
  • 77.HarmonyOS NEXT ImageViewerView 组件深度剖析: Swiper容器与懒加载深度解析
  • 智慧加油站小程序数据库设计文档
  • Redis 的应用场景
  • 提升HDFS存储和读取效率
  • Json实现深拷贝的缺点
  • 2.5 python接口编程
  • Java File 类详解
  • Wireshark 抓包全解析:从数据捕获到报文分析
  • 2024年12月CCF-GESP编程能力等级认证C++编程二级真题解析
  • 深入探索人工智能(AI):分类、应用与案例分析
  • 基于模态特定因子的高效低秩多模态融合方法解析
  • 基于Python的天气预报数据可视化分析系统-Flask+html
  • python从邮件中提取链接中的符号为什么会变成amp; 解决办法
  • 华为手机助手输入连接码时光标乱跳
  • 旅马大熊猫“福娃”“凤仪”平安回国
  • 艺术稀缺性和价值坚守如何构筑品牌差异化壁垒?从“心邸”看CINDY CHAO的破局之道
  • 上海市税务局回应刘晓庆被举报涉嫌偷漏税:正依法依规办理
  • 一图看懂|印巴交火后,双方基地受损多少?
  • 女孩患异食癖爱吃头发,一年后腹痛入院体内惊现“头发巨石”
  • 特朗普访问卡塔尔,两国签署多项合作协议