time包
时间对象 time.Now()
func main() {
now := time.Now() //获取当前时间
fmt.Printf("current time:%v\n", now) //current time:2021-02-17 18:38:33.448969 +0800 CST m=+0.000073901
year := now.Year() //年
month := now.Month() //月
day := now.Day() //日
hour := now.Hour() //小时
minute := now.Minute() //分钟
second := now.Second() //秒
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second) //2021-02-17 18:38:33
}
时间戳 time.Now().Unix()
- 1970-1-1 到现在的秒数
func main() {
now := time.Now() //获取当前时间
timestamp := now.Unix() //时间戳
timestamp2 := now.UnixNano() //纳秒时间戳
fmt.Printf("current timestamp1:%v\n", timestamp) //current timestamp1:1613558670
fmt.Printf("current timestamp2:%v\n", timestamp2) //current timestamp2:1613558539059848000
timeObj := time.Unix(timestamp, 0) //将时间戳转为时间格式
fmt.Println(timeObj) //2021-02-17 18:44:30 +0800 CST
year := timeObj.Year() //年
month := timeObj.Month() //月
day := timeObj.Day() //日
hour := timeObj.Hour() //小时
minute := timeObj.Minute() //分钟
second := timeObj.Second() //秒
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)//2021-02-17 18:44:30
}
time.sleep() 和 time.Duration()
时间单位
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
//time.Duration()
var n int = 5
//不能int乘以 Duration,必须通过time.Duration将int转换为Duration
time.Sleep(time.Duration(n) * time.Second)
时间操作
Add
求当前时间/某个时间 的1小时之后的时间,Go语言的时间对象有提供Add方法如下:
func (t Time) Add(d Duration) Time
举个例子,求一个小时之后的时间:
func main() {
now_time := time.Now() //获取当前时间
fmt.Println(now_time) //2021-02-17 19:01:51.311598 +0800 CST m=+0.000068790
t2_time := now_time.Add(time.Hour) //当前时间的1小时之后的时间
fmt.Println(t2_time) //2021-02-17 20:01:51.311598 +0800 CST m=+0.000068790
}
Sub
求 两个时间 之间 的间隔
func main() {
now_time := time.Now() //获取当前时间
t2_time := now_time.Add(time.Hour) //当前时间的1小时之后的时间
fmt.Println(t2_time.Sub(now_time)) //1h0m0s
}
返回一个时间段t-u。如果结果超出了Duration可以表示的最大值/最小值,将返回最大值/最小值。要获取时间点t-d(d为Duration),可以使用t.Add(-d)。
Equal
func (t Time) Equal(u Time) bool
判断两个时间是否相同,会考虑时区的影响,因此不同时区标准的时间也可以正确比较。本方法和用t==u不同,这种方法还会比较地点和时区信息。
Before
func (t Time) Before(u Time) bool
如果t代表的时间点在u之前,返回真;否则返回假。
After
func (t Time) After(u Time) bool
如果t代表的时间点在u之后,返回真;否则返回假。
定时器 time.Tick()
func main() {
for tmp := range time.Tick(time.Second*2){ //定时器,每x秒触发1次
fmt.Println(tmp) //每x秒输出类似 2021-02-17 19:09:06.280391 +0800 CST m=+0.000084442
}
}
时间格式化 time.Now().Format()
go中类比 y m d H:M:S 用的是2006 01 02 03 04 05 如果要24小时制,03 换成 15 即可
func main() {
now_time := time.Now() //获取当前时间
fmt.Println(now_time)
//2006 01 02 之间用 - 用 空格 用 : 都根据自己喜好添加
ret1 := now_time.Format("2006-01-02 03:04:05") //2021-02-17 19:19:09
ret2 := now_time.Format("2006-01-02 15:04:05 PM") //2021-02-17 19:19:09 PM
//带毫秒的
ret3 := now_time.Format("2006-01-02 03:04:05.000 PM") //2021-02-17 07:43:46.659 PM
fmt.Println(ret1)
fmt.Println(ret2)
fmt.Println(ret3)
}
解析字符串类型的时间
- 如果字符串是
"2021-01-01 15:00:00"用-的格式,解析模板也要用"2006-01-02 15:04:05" - 如果字符串是24小时制,解析模板也要用24小时制
"2006-01-02 15:04:05" - go解析的时间默认是 UTC 时间,如果要解析成东八区时间 需要单独指定时区,用
time.ParseInLocation()
func main() {
//解析字符串格式的时间
timeStr := "2021-01-01 15:00:00"
//1,拿到时区
loc,err := time.LoadLocation("Asia/Shanghai")
if err != nil{ //如果报错
fmt.Println(err)
return
}
//2,解析字符串格式的时间,参数1:传解析出来的时间格式模板,参数2:传字符串格式的时间
timeObj,err := time.Parse("2006-01-02 15:04:05",timeStr)
if err != nil{
fmt.Println("解析时间格式出错1:",err)
return
}
fmt.Println(timeObj) //2021-01-01 15:00:00 +0000 UTC
//3,根据时区解析成指定某个时区的时间
timeObj2,err2 := time.ParseInLocation("2006-01-02 15:04:05",timeStr,loc)
if err != nil{
fmt.Println("解析时间格式出错2:",err2)
return
}
fmt.Println(timeObj2) //2021-01-01 15:00:00 +0800 CST
}
浙公网安备 33010602011771号