1. time包介绍
time是Go语言内置的一个包,它提供了很多与时间相关的函数和类型,可以用来做时间相关的运算、格式化时间字符串、解析时间字符串等。在本文中,我们将详细介绍time包的常用函数和类型。
2. time包中的常用类型
2.1. time.Time类型
time.Time类型表示一个时间点,它的零值表示0001-01-01 00:00:00 UTC。我们可以通过time.Now()函数获取当前时间:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}
运行结果:
2022-02-22 08:30:45.7240858 +0800 CST m=+0.003000601
time.Time类型包含了年月日时分秒和时区信息,可以进行算术、比较和格式化操作。
2.2. time.Duration类型
time.Duration类型表示一个时间间隔,以纳秒为单位,可以使用time.ParseDuration函数将字符串转换为Duration类型:
package main
import (
"fmt"
"time"
)
func main() {
d, _ := time.ParseDuration("1h30m")
fmt.Println(d)
}
运行结果:
1h30m0s
该程序将字符串"1h30m"解析为1个半小时的时间间隔。
3. time包中的常用函数
3.1. time.Now()函数
time.Now函数返回当前时间:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now)
}
运行结果:
2022-02-22 08:30:45.7240858 +0800 CST m=+0.003000601
3.2. time.Parse()函数
time.Parse函数可以将字符串解析为time.Time类型:
package main
import (
"fmt"
"time"
)
func main() {
str := "2022-02-22 08:30:45"
t, _ := time.Parse("2006-01-02 15:04:05", str)
fmt.Println(t)
}
运行结果:
2022-02-22 08:30:45 +0000 UTC
需要注意的是,time.Parse函数的第一个参数是时间字符串的格式,其中"2006-01-02 15:04:05"分别代表年月日时分秒,这是一个特殊的日期,用来提供给开发者一个时间格式化的参照,详情可以参见Go官网文档。
3.3. time.Format()函数
time.Format函数可以将time.Time类型格式化为字符串:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
str := now.Format("2006-01-02 15:04:05")
fmt.Println(str)
}
运行结果:
2022-02-22 08:30:45
与time.Parse函数一样,time.Format函数的格式化参数也需要开发者自己输入。
3.4. time.Sleep()函数
时间等待操作可以使用time.Sleep函数:
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("开始休眠")
time.Sleep(3 * time.Second)
fmt.Println("休眠结束")
}
运行结果:
开始休眠
休眠结束
time.Sleep函数接受一个time.Duration类型的参数,表示等待的时间。
3.5. time.Tick()函数
time.Tick函数每隔一段时间向返回的channel中发送一个时间:
package main
import (
"fmt"
"time"
)
func main() {
tick := time.Tick(1 * time.Second)
for t := range tick {
fmt.Println(t)
}
}
运行结果:
2022-02-22 08:35:47.8081185 +0800 CST m=+1.001000301
2022-02-22 08:35:48.8080532 +0800 CST m=+2.001000901
2022-02-22 08:35:49.8079869 +0800 CST m=+3.001000001
2022-02-22 08:35:50.8080043 +0800 CST m=+4.001000101
...
该程序每隔1秒打印一次当前时间。
3.6. time.Unix()函数
time.Unix函数可以将Unix时间戳转换为time.Time类型:
package main
import (
"fmt"
"time"
)
func main() {
unixTime := time.Unix(1645547999, 0)
fmt.Println(unixTime)
}
运行结果:
2022-02-23 07:19:59 +0800 CST
该程序将Unix时间戳1645547999转换为该时刻的time.Time类型。
3.7. time.Since()函数
time.Since函数可以计算从某个时间点到现在经过的时间:
package main
import (
"fmt"
"time"
)
func main() {
t1 := time.Date(2022, time.February, 22, 8, 0, 0, 0, time.Local)
duration := time.Since(t1)
fmt.Println(duration)
}
运行结果:
8h33m22.527s
该程序计算从2022年2月22日8点到现在经过的时间。
4. 总结
time包提供了很多时间相关的函数和类型,可以进行时间格式化、时间解析、时间等待、时间间隔计算等操作。在实际开发中,我们经常需要用到time包,所以对于其中的常用函数和类型需要了解熟练使用。