time包是与时间相关的操作方法集合,只要是涉及时间计算,展示的都要用到time包
time包主要划分了时间点和时间段两种,即:
- 时间点(Time)
- 时间段(Duration)
时间点记录的是时间的信息如2020年四月25号 12点30分45秒这样的信息,时间段记录的是时间的长度如1秒,1分钟,1小时这样的时间长度信息。
一、时间点(Time)
1、初始化
要用时间函数,第一步需要先初始化,常见的初始化方式有下面几种
time.Now() 初始化当前时间 返回time对象
time.Parse() 初始化指定时间 返回time对象,例如有时候需要对某个时间进行计算就需要用到这个方法
例:time.Parse("2006-01-02 15:04:05","2020-04-27 11:01:02") //第一个参数必须写成 2006-01-02 15:04:05 时间才可以,具体原因在time包format.go 方法 nextStdChunk中可以看到
上面parse的返回对象time 时区是UTC时区,如果要用中国的东八区时区,可以用time.ParseInLocation方法
time.Date() 如果觉得上面的parse方法比较麻烦,也可以用Date方法,parse方法底层也是用的Date方法
例:time.Date(2020,4,27,11,30,10,0, time.Local)
如果有需要跨时区计算的需求,可以用time.LoadLocation()方法
t,_:= time.LoadLocation("America/Los_Angeles")
fmt.Println(time.Now().In(t)) 这样就可以将当前时区转为洛杉矶时区的时间
2、格式化
初始化得到的是时间对象,如果想转换为我们想要的格式,还需要进行格式化,格式化方法有以下几种
转换为字符串
time.Now().Format("2006-01-02 15:04:05")
time.Now().Format(time.UnixDate) //包含时区
转换为时间戳
time.Now().Unix() //转换为10位数时间戳
time.Now().UnixNano() //转换为20位数时间戳
还有些其他方法,从名字大致可以判断用途,就只列出常见的一些
func (t Time) Date() (year int, month Month, day int)
func (t Time) Clock() (hour, min, sec int)
func (t Time) Year() int
func (t Time) Month() Month
func (t Time) Day() int
func (t Time) Hour() int
func (t Time) Minute() int
func (t Time) Second() int
func (t Time) Nanosecond() int
func (t Time) YearDay() int
func (t Time) Weekday() Weekday
时间点介绍完了,接下来介绍时间段
二 时间段(Duration)
时间段初始化只有一个方法 ParseDuration() 返回值就是Duration对象
Duration 经常和time对象互相搭配使用,用来计算一定时间范围内时间差值,下面就直接说下它们俩的组合使用方法。
三 时间运算
加法
time.Now() .Add(time.Duration(10) * time.Second)
增加年月日数
time.Now().AddDate(years int, months int, days int)
减法
time.Now().Sub()
例:
t := time.Now()
t1,_:=time.ParseInLocation("2006-01-02 15:04:05","2020-04-27 11:01:02",time.Local)
t.Sub(t1)
常用的就是加减这几种其他的用法,其他的可以自己再研究用法
三、Ticker类型
time包还有ticker类型常常用来做定时器操作,设定每隔一段时间运行
四、Timer类型
timer 用来做触发器操作,当达到某个条件,如设定3秒后程序结束运行,可以用timer做触发操作
time包分析完了,下一篇分析下os包