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

golang 的time包的常用方法

目录

time 包方法总结

类型 time.Time 的方法

库函数

代码示例:


time 包方法总结

类型 time.Time 的方法
方法名描述示例               ẵ
Now()获取当前时间和日期time.Now()
Format()格式化时间为字符串time.Now().Format("2006-01-02 15:04:05")
Add()增加指定时间time.Now().Add(2 * time.Hour)
Hour()获取小时部分time.Now().Hour()
Date()获取年、月、日部分time.Now().Date()
Before()判断当前时间是否在指定时间之前time.Now().Before(time.Now())
AddDate()增加年、月、日time.Now().AddDate(1, 2, 3)
Clock()获取小时、分钟、秒部分time.Now().Clock()
After()判断当前时间是否在指定时间之后time.Now().After(time.Now().Add(-1 * time.Hour))
Compare()比较时间,返回-1(当前时间小于指定时间)、0(相等)、1(当前时间大于指定时间)time.Now().Compare(time.Now().Add(-1 * time.Hour))
Equal()判断两个时间是否相等time.Now().Equal(time.Now())
Weekday()获取星期几time.Now().Weekday()
Truncate()截断时间到最接近但不超过的倍数时间time.Now().Truncate(24 * time.Hour)
In()转换为指定时区time.Now().In(time.UTC)
String()返回时间字符串time.Now().String()

库函数
方法名描述示例               ẵ
Parse()解析字符串为时间time.Parse("2006/01/02", "2022/05/19")
Add()增加指定时间future := time.Now().Add(2 * time.Second)
Sub()计算时间差diff := future.Sub(time.Now())
Sleep()阻塞当前 goroutine 一段时间time.Sleep(2 * time.Second)
AfterFunc()在指定时间后执行函数time.AfterFunc(diff, func() { ... })
NewTimer()创建一个计时器timer := time.NewTimer(5 * time.Second)
Stop()停止计时器timer.Stop()
Since()计算从某个时间到现在的时间差time.Since(start)
Date()创建一个新的时间time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC)
After()返回一个在指定时间后的通道time.After(2 * time.Hour)

代码示例:
package main

import (
	"fmt"
	"time"
)

func main() {
	// 当前时间
	fmt.Println(time.Now())

	// 格式化,string
	fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
	fmt.Println(time.Now().Format("2006.01.02 15:04:05.000"))
	fmt.Println(time.Now().Format("2006/01/02 15/04/05"))

	// --------------------------类型time.
	fmt.Println("--------------------")
	fmt.Println(time.Now().Add(2 * time.Hour))
	fmt.Println(time.Now().Hour())
	fmt.Println(time.Now().Date()) // year int, month Month, day int
	fmt.Println(time.Now().Before(time.Now()))
	fmt.Println(time.Now().AddDate(1, 2, 3))
	fmt.Println(time.Now().Clock())                                 // hour int, min int, sec int
	fmt.Println(time.Now().After(time.Now().Add(-1 * time.Hour)))   // true
	fmt.Println(time.Now().Compare(time.Now().Add(-1 * time.Hour))) // 调用者小于t返回-1,等于返回0,大于返回1。
	fmt.Println(time.Now().Equal(time.Now()))
	fmt.Println(time.Now().Weekday())
	fmt.Println(time.Now().Truncate(24 * time.Hour)) //截断到最接近但不超过原始时间的d的倍数。截断到最近的一天开始时刻
	fmt.Println(time.Now().In(time.UTC))             // 转换为UTC时区
	fmt.Println(time.Now().String())

	// ----------------------------库time.
	fmt.Println("--------------------")
	// 解析
	parseTime, _ := time.Parse("2006/01/02", "2022/05/19")
	fmt.Println(parseTime) // 2022-05-19 00:00:00 +0000 UTC

	// 运算
	future := time.Now().Add(2 * time.Second)
	fmt.Println(future)
	diff := future.Sub(time.Now())
	fmt.Println(diff)

	// 延时、定时
	var start = time.Now()
	time.Sleep(2 * time.Second)
	time.AfterFunc(diff, func() {
		fmt.Println("时间到")
	})
	// timer
	timer := time.NewTimer(5 * time.Second)
	fmt.Println("开始等待")
	<-timer.C // 经过指定的时间间隔后发送当前时间到它的通道(C);阻塞直到计时器到期
	//time.Timer 对象包含一个名为 C 的通道(channel),其类型为 <-chan Time。这个通道用于接收计时器到期的通知。
	//具体来说,当你创建了一个 time.Timer 并设置了一定的持续时间后,这个定时器会在设定的时间间隔后通过它的 C 通道发送当前的时间信息。
	fmt.Println("5秒过去了")
	// 等价于time.After(5 * time.Second)

	timer = time.NewTimer(5 * time.Second)
	stopped := timer.Stop() //如果计时器已经在通道上发送了值,则 Stop 不会有任何效果。
	if stopped {
		fmt.Println("计时器已成功停止")
	} else {
		fmt.Println("计时器未能停止")
	}
	// 注意:这里需要防止goroutine泄露,实际应用中应谨慎处理
	select {
	case <-timer.C:
		// 如果计时器到期,这里会被触发
	default:
		// 如果计时器被成功停止,这里什么都不会发生
	}

	// 其他
	fmt.Println(time.Since(start))
	// 输出: 2025-03-29 20:38:00 +0000 UTC
	fmt.Println(time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC))
	fmt.Println(time.After(2 * time.Hour)) // 打印通道本身,而非时间点
}

相关文章:

  • 通过 Adobe Acrobat DC 实现 Word 到 PDF 的不可逆转换
  • HTML5和CSS3的一些特性
  • fastdds:传输层端口号计算规则
  • IPython 使用技巧整理
  • 网络安全之前端学习(css篇2)
  • 深入解析浮点数阶码与基数的数学关系及其C++实现
  • 读书笔记-《Redis设计与实现》(二)单机数据库实现(下)
  • 【橘子大模型】ollama启动
  • 数据结构与算法分析:树与哈希表(一)
  • DeepSeek V3 与 DeepSeek R1的主要区别是什么?
  • 3.30西篮联,NBA,全扫盘
  • 基于yolo11的水稻病虫害智能分析系统
  • 大模型架构记录12【Agent实例-tool】
  • pod几种常用状态
  • 2025-3-30算法打卡
  • 一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证
  • 电控---陀螺仪
  • Python-使用API
  • 设计模式-结构型模式-享元模式
  • JVM类加载器详解
  • 一个空间可以做多少个网站/百度竞价推广方案范文
  • 公司网站建设前期情况说明/最近三天的新闻热点
  • 银川网站建设一条龙服务/网站设计专业的公司
  • 怎么做网店网站/商城系统开发
  • 饿了么网站做生鲜吗/企业网站定制开发
  • 响应式网站用什么软件做效果/网络运营推广具体做什么工作