携手创造,共同成长!这是我参加「日新方案 8 月更文挑战」的第27天,点击查看活动详情
一、Go 言语的 time
标准库
Go 言语的 time
标准库提供了时刻交互以及测量时刻的函数和方法。
获取当前时刻 Now
要在 Go 言语中获取当前时刻能够运用 time
包下的 Now
方法。
func main(){
t := time.Now()
fmt.Println(t) // 2022-08-27 12:18:47.399006 +0800 CST m=+0.000088462
}
输出的时刻中的 CST
表明时区,如果计算机中设置的时区不同,那么输出的所处的时刻也不一样,也就是说 Now
获取的时刻是来自底层操作系统的时刻。
程序暂停 Sleep
Java 中能够经过 Thread.sleep()
来让线程休眠,从而使程序暂停履行,Go 中的 time
包下的 Sleep
函数能够让程序暂停或许休眠指定的时刻。
func main(){
fmt.Println("要开始休眠了.....")
time.Sleep(3 * time.Second)
fmt.Println("休眠 3s 完毕.....")
}
履行上述代码,输出成果如下:
要开始休眠了.....
休眠 3s 完毕.....
履行该程序时,观察控制台内容输出的时刻,能够确定两次输出时刻间隔为 3s,其间 time.Second
表明单位为 s,也能够挑选 time.Millisecond
或许 time.Minute
等其他时刻单位。
重复履行
运用 Ticker 结构体的实例化目标能够让程序在指定的时刻间隔下重复履行, time.Tick
函数能够回来一个 Ticker 目标
func main(){
c := time.Tick(3 * time.Second)
for t := range c {
fmt.Printf("time is now %v\n", t)
}
}
履行上述代码,输出成果如下:
time is now 2022-08-27 12:36:10.594926 +0800 CST m=+3.001155491
time is now 2022-08-27 12:36:13.594966 +0800 CST m=+6.001165447
time is now 2022-08-27 12:36:16.595 +0800 CST m=+9.001168869
如果不手动中止程序,程序会一直履行。
二、时刻与字符串的转化
Go 中将时刻转化成字符串需求运用到 Format
函数,首要运用 time.Date
函数创立一个 Time
结构体实例化目标。
接着运用这个实例化目标调用 Format
函数就能够回来一个字符串类型的时刻
func main() {
timeType := time.Date(2022, 8, 27, 12, 00, 00, 0,time.Local)
fmt.Printf("%v\n", timeType) // 2022-08-27 12:00:00 +0800 CST
fmt.Printf("%T\n", timeType) // time.Time
layout := "2006-01-02 15:04:05"
timeStr := timeType.Format(layout)
fmt.Printf("%v\n", timeStr) // 2022-08-27 12:00:00
fmt.Printf("%T\n", timeStr) // string
}
其间 layout 表明转化成字符串类型的格局,要注意这儿界说的 layout 时刻是 Go 言语诞生的时刻,不能够运用其他时刻,除此之外 Go 中还界说了其他方式的 layout 常量。
字符串转化成时刻类型也需求这样一个 layout 以及 Parse
函数
func main(){
t := "2022-09-08 22:04:19"
layout := "2006-01-02 15:04:05"
timeType, err := time.Parse(layout, t)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%v\n", timeType) // 2022-09-08 22:04:19 +0000 UTC
fmt.Printf("%T\n", timeType) // time.Time
}
在字符串转成时刻目标之后,就能够经过 Time
结构体目标来获取字符串时刻中共的 Year, Month, Day, WeekDay 等信息
字符串转成时刻和时刻转成字符串不同的是:
- 字符串转成时刻需求运用
time.Parse
函数,除了回来一个时刻目标还会回来一个 err。 - 时刻转化成字符串需求运用到实例化的
Time
结构体调用Format
函数,该函数只回来一个 string。
三、时刻的加减与比较
Time
结构体除了能够获取目标中的年月日等信息外,还能够经过 Add
和 Sub
函数完成时刻的加减等一些其他的操作。
func main(){
t := "2022-09-08 22:04:19"
layout := "2006-01-02 15:04:05"
timeType, err := time.Parse(layout, t)
if err != nil {
log.Fatal(err)
}
futureTime := timeType.Add(24 * time.Hour)
fmt.Printf("%v\n", futureTime)
diff := futureTime.Sub(timeType)
fmt.Printf("%v\n", diff)
}
履行上述代码,输出成果如下:
2022-09-09 22:04:19 +0000 UTC
24h0m0s
After
, Before
, Equal
三个函数能够用来比较时刻目标
func main(){
t1 := "2022-09-08 22:04:19"
t2 := "2022-09-09 22:04:19"
layout := "2006-01-02 15:04:05"
timeIns1, err := time.Parse(layout, t1)
if err != nil {
log.Fatal(err)
}
timeIns2, err := time.Parse(layout, t2)
if err != nil {
log.Fatal(err)
}
fmt.Println(timeIns1.After(timeIns2)) // false
fmt.Println(timeIns1.Before(timeIns2)) // true
fmt.Println(timeIns1.Equal(timeIns2)) // false
}