Go语言基础之time包详解

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包,所以对于其中的常用函数和类型需要了解熟练使用。

后端开发标签