time包提供了时间的显示和测量用的函数,日历计算采用的是公历。
为了等下的代码能更好的理解,先写一个print函数
func printTime(i string, t time.Time) {
fmt.Println(i, t)
}
time包的函数及方法:
基础用法:
t1 := time.Now()
printTime("当前时间:", t1)
printTime("将时间转换为本地时区时间:", t1.Local())
printTime("将时间转换成UTC和零时区(国际统一时间)", t1.UTC())
使用Date函数,指定数值,返回一个设定的时间:
t2 := time.Date(2012, time.March, 29, 9, 15, 0, 0, time.Local)
printTime("测试Date()方法:", t2)
通过Parse函数来格式化一个时间样式,layout是模板,value是值,且layout时间必须是2006年1月2日15点4分5秒,不管时间是用的哪个格式,返回的是一个UTC的时间。
t3, _ := time.Parse("2006-01-02 15:04:05", "2018-01-01 09:12:37")
printTime("使用parse函数:", t3)
使用Formant方法格式化当前时间,layout时间必须是2006年1月2日15点4分5秒,不管时间是用的哪个格式。
fmt.Println("使用Formant方法格式化当前时间:", time.Now().Format("2006-01-02 15:04:05"))
使用String将时间转换成字符串
fmt.Println("使用String方法格打印当前时间:", time.Now().String())
使用Unix方法将时间转换为Unix时间,即从时间点1970年1月1日0时0分0秒UTC到指定时间的秒数
fmt.Println("使用Unix方法获得秒数:", t3.Unix())
使用UnixNano方法将时间转换为Unix时间,即从时间点1970年1月1日0时0分0秒UTC到指定时间的纳秒数
fmt.Println("使用UnixNano方法获得纳秒数:", t3.UnixNano())
使用Equal方法,判断时间是否相等
fmt.Println("使用Equal方法判断时间是否相等:", t3.Equal(time.Now())) //false
使用Before方法,判断时间是否在某个时间之前
fmt.Println("使用Before方法判断t2是否在t3之前:", t2.Before(t3)) //true
使用After方法,判断时间是否在某个时间之后
fmt.Println("使用After方法判断t2是否在t3之后:", t2.After(t3)) //false
使用Date方法,返回指定的时间对应的年月日信息,月打印出来是英文单词。
y1, m1, d1 := time.Now().Date()
fmt.Printf("使用Date方法获取当前是:%v年%v月%v日 \n", y1, m1, d1)
使用Year方法返回对应的年信息
fmt.Println("使用Year方法返回的年是:", time.Now().Year())
使用Month方法返回对应的月信息,返回的月信息是英文单词。
fmt.Println("使用Month方法返回的月是:", time.Now().Month())
使用Day方法返回对应的日信息
fmt.Println("使用Day方法返回的日是:", time.Now().Day())
使用Cluck方法返回指定的时间的小时,分,秒
h1, min1, s1 := time.Now().Clock()
fmt.Printf("使用Clock方法获取当前是:%v时%v分%v秒 \n", h1, min1, s1)
fmt.Println("使用Hour方法返回的小时是:", time.Now().Hour())
fmt.Println("使用Minute方法返回的分钟是:", time.Now().Minute())
fmt.Println("使用Second方法返回的秒是:", time.Now().Second())
fmt.Println("使用NanoSecond方法返回的纳秒是:", time.Now().Nanosecond())
使用Sub方法返回一个时间段,仅显示小时、分钟、秒,及Sub下的几个方法。
fmt.Println("使用Sub方法算出t2到现在的时间:", time.Now().Sub(t2))
//使用Hours方法将Sub方法获得的时间转换为小时为单位的int64值
fmt.Println("使用Hours方法算出t2到现在的时间:", time.Now().Sub(t2).Hours(), "小时")
//使用Minuter方法将Sub方法获得的时间转换为分钟为单位的int64值
fmt.Println("使用Minutes方法算出t2到现在的时间:", time.Now().Sub(t2).Minutes(), "分钟")
//使用Seconds方法将Sub方法获得的时间转换为秒为单位的int64值
fmt.Println("使用Seconds方法算出t2到现在的时间:", time.Now().Sub(t2).Seconds(), "秒")
//使用Seconds方法将Sub方法获得的时间转换为纳秒为单位的int64值
fmt.Println("使用Nanoseconds方法算出t2到现在的时间:", time.Now().Sub(t2).Nanoseconds(), "纳秒")
//使用String方法返回时间段采用"01h02m03s格式的字符串
fmt.Println("使用String方法打印t2到现在时间的字符串:", time.Now().Sub(t2).String())
使用ParseDuration解析一个时间段字符串。
一个时间段字符串是一个序列,每个片段包含可选的正负号、十进制数、可选的小数部分和单位后缀,如”300ms”、”-1.5h”、”2h45m”。
合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。
d3, _ := time.ParseDuration("300h")
fmt.Printf("通过ParseDuration函数,解析出来的时间段,类型为:%T,数值为:%v \n", d3, d3)
使用Add方法获得一个时间加上指定时间段
fmt.Println("t2加上d3是:",t2.Add(d3))
使用AddDate方法,在指定时间上,加上一个年月日,获得日期。
fmt.Println("t2过上10年是",t2.AddDate(10,0,0))