时间和日期是我们编程中经常会用到的,在Go语言中time包提供了时间显示和测量等所用的函数。
时间的获取
获取当前时间
通过 time.Now() 函数来获取 当前的时间对象 ,然后通过时间对象来获取当前的时间信息。
示例:
now := time.Now()// 年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)
2023 May 27 17 27 29
获取年月日时分秒
获取时间戳
时间戳是自 1970 年 1 月 1 日(08:00:00GMT)至当前时间的总毫秒数,它也被称为 Unix 时间戳(UnixTimestamp)
now := time.Now()// 时间戳unix := now.Unix()// 纳秒时间戳nano := now.UnixNano() fmt.Println(unix, nano)
时间戳转化换时间对象
利用time.Unix可以把时间戳转换为时间对象
now := time.Now()// 时间戳unix := now.Unix()// 时间戳转换为时间对象t := time.Unix(unix, 0) fmt.Println(t)
获取星期时间
now := time.Now() s := now.Weekday().String() fmt.Println(s)
时间操作函数
Add
某个时间 + 时间间隔
语法:
func (t Time) Add(d Duration) Time
示例:
now := time.Now() r := now.Add(time.Hour) fmt.Println(r)
获取当前时间加1小时后的时间
Sub
求两个时间之间的差值
语法:
func (t Time) Sub(u Time) Duration
示例:
now := time.Now() r := now.Add(time.Hour * 12)// 两个时间的差值d := r.Sub(now) fmt.Println(d)
Equal
判断两个时间是否相同
语法:
func (t Time) Equal(u Time) bool
解释:
Equal 函数会考虑时区的影响,因此不同时区标准的时间也可以正确比较,Equal 方法和用 t==u 不同,Equal 方法还会比较地点和时区信息
Before
判断一个时间点是否在另一个时间点之前
语法:
func (t Time) Before(u Time) bool
解释:
如果 t 代表的时间点在 u 之前,则返回真,否则返回假。
After
判断一个时间点是否在另一个时间点之后
func (t Time) After(u Time) bool
解释:
如果 t 代表的时间点在 u 之后,则返回真,否则返回假。
定时器
NewTimer
time 包里的 NewTimer() 函数用于创建一次性计时器
语法:
func NewTimer(d Duration) *Timer
示例:
timer := time.NewTimer(5 * time.Second)// 得到定时后的系统时间<-timer.C fmt.Println("定时结束...")
NewTicker
time 包里的NewTicker()函数用于创建周期性的计时器,它每隔指定时间都会触发一次
语法:
func NewTicker(d Duration) *Timer
示例:
// ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发(周期性计时器)。t := time.NewTicker(time.Second * 2)defer t.Stop() tag := 0for { tag++ if tag == 10 { break } <-t.C // 每隔两秒都会接受一次NewTicker发来的时间 fmt.Println("Ticker running...") }
Tick
time.Tick是对 time.NewTicker的封装。
语法:
func Tick(d Duration) *Timer
示例:
ticker := time.Tick(time.Second) //定义一个1秒间隔的定时器,Tick是周期定时器tag := 0for i := range ticker { //遍历定时器 ticker tag++ fmt.Println(i) //每秒都会执行的任务 if tag == 10 { break } }
Reset
Timer 是一次性计时器,Ticker 是周期性计时器。可以用 Timer + Reset 实现周期性计时器。
语法:
func (t *Timer) Reset(d Duration) bool
Sleep
for+time.Sleep实现定时器功能
for true { time.Sleep(time.Second * 2) fmt.Println("2s执行一次") }
时间格式化
Format
时间类型有一个自带的 Format方法 进行格式化。需要注意的是Go语言中格式化时间模板不是常见的 Y-m-d H:M:S。而是使用Go的诞生时间 2006年1月2日 15点04分 (记忆口诀:2006 1 2 3 4 5)
示例:
now := time.Now()// 12小时制fmt.Println(now.Format("2006-01-02 03:04:05"))// 24小时制fmt.Println(now.Format("2006-01-02 15:04:05"))
2023-05-29 10:55:302023-05-29 10:55:30
日期字符串转换成时间戳
语法:
func ParseInLocation(layout, value string, loc *Location) (Time, error)
示例:
// 日期字符串转换成时间戳var timeStr2 = "2023-05-29 15:10:05"var tmp = "2006-01-02 15:04:05"timeObj, _ := time.ParseInLocation(tmp, timeStr2, time.Local) fmt.Println(timeObj.Unix())
时间间隔
time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最大长度段大约290年。
time包中定义的时间间隔类型的常量如下:
过目不忘的记忆秘诀,超强记忆力数字密码的训练图,金记忆: 学习一种记电话号码方法,听一遍就记住,不要纸和笔抄写
高效记忆,过目不忘的记忆秘诀,免费学记忆力—15 倒数第6篇,电话号码记不住,电话记忆法来帮你
快速记忆110个数字编码图,高效记忆,打电话时不用再找纸和笔,也能快速记下电话号码和事情,很实用
如何快速提高记忆力,快速记忆110个数字编码图,手机号码短时间内容易记忆?这样记忆才最快
一分钟超强记忆法,背题的快速记忆技巧,还在为中考地理担心?快速记忆拿下来
如何快速提高记忆力,三天五遍记忆法,#快速记忆
精选推荐
- [记忆方法] 最有效的备考方法,法考如何备考,2021年高考备考:8种高效记忆方法
- [记忆方法] 考前快速大量记忆技巧,最有效的备考方法,考前冲刺:一消备考也要动脑筋,这样记忆方法大多数考生并不知道
- [记忆方法] 怎样快速记忆知识点且记得牢,考前快速大量记忆技巧,会计从业备考不放假,六大归纳记忆法带你飞!
- [记忆方法] 快速记忆方法的小窍门,怎样快速记忆知识点且记得牢,这些记忆方法让你学习、备考的效率大大提升!
- [精品记忆课] 记忆课程有没有效果,记忆力课程,“超强记忆”吸引家长买了课,没上几节校长就失联,41名家长能要回16万余元的培训费用吗?
- [精品记忆课] 最强大脑记忆训练法视频,记忆课程有没有效果,超强记忆系统课_第2节 底层逻辑篇 超强记忆系统课_第2节
- [古诗词记忆] 孩子记忆力差,背书困难怎么办,有什么快速背书的方法,有用的背书方法,快收藏码住吧~
- [记忆方法] 记忆的方法和技巧,记忆宫殿训练方法,技巧:熟记这些顺口溜,轻松记忆历史朝代知识
- [记忆方法] 历史朝代记忆口诀,记忆的方法和技巧,我国历史朝代顺序记忆口诀
- [古诗词记忆] 文科怎么背怎样才能记得住,文科背书怎么背得快又牢固,文科成绩难提高?你需要这12个方法