go时间处理

go时间处理
菠萝由于在项目中对于时间的处理总是能看到不同的处理方式,Java中和go中都有不同的处理方式。每个人对于时间的处理方式也尽相同,主要记录go中对于时间的处理方式。
go在web项目中的时间处理
关于我在项目中看到的对于时间的表示
在gin项目中使用gorm的时候
gorm中主要使用time.Time来表示时间和计算
在go-zero-looklook中
使用 int64–>转换成time.Time
go中时间处理常用方法
时间的表示
Go 语言中时间的表示方式是通过 time.Time 结构体来表示的。time.Time 类型代表了一个时刻,它包含了年月日时分秒和纳秒等信息。
我们可以使用 time.Now() 函数获取当前时间,或者使用 time.Date() 函数创建一个指定的时间。
package main |
hello world |
我们可以看到,当前时间和指定时间的格式都是 年-月-日 时:分:秒.纳秒 时区
的形式。
在Go语言中,还提供了一些常用的时间常量,如 time.RFC3339
和 time.RFC822
等。这些常量可以用于解析或格式化时间字符串,如下所示:
package main |
解析字符串: 2023-12-26 14:00:00 +0800 CST |
注意事项:
time.Time
类型是一个值类型,不能使用指针来传递或比较。- Go 语言中的时间默认使用的是 UTC 时间,如果需要使用本地时间,可以使用
time.Local
来指定时区。
时间的计算
在 Go 语言中,时间的计算是通过 time.Duration 类型来表示的。time.Duration 类型代表了一段时间,可以表示一段时间的长度,例如 5 分钟、10 小时等。
time.Duration 类型可以使用 time.ParseDuration() 函数从字符串中解析出来,也可以使用 time.Duration 类型的常量来表示,例如 5 * time.Minute 表示 5 分钟。
package main |
5.0008615s |
注意事项:
- time.Duration 类型的值可以是正数、负数或零,可以进行加减运算。
- time.Time 类型的 Add() 方法可以用于时间的加法运算,可以接收一个 time.Duration 类型的参数,也可以使用负数表示时间的减法运算。
时间的比较
在 Go 语言中,可以使用 time.Before()、time.After() 和 time.Equal() 等方法来比较两个时间的先后顺序以及是否相等。
package main |
注意事项:
- time.Time 类型可以直接使用 <、> 和 == 等操作符进行比较,也可以使用 Before()、After() 和 Equal() 等方法来比较。
- 在比较两个时间是否相等时,尽量使用 Equal() 方法,而不是直接使用 == 操作符,因为 time.Time 类型是一个结构体类型,使用 == 操作符比较的是结构体的内存地址,而不是结构体的内容。
时区和时间的格式化
在 Go 语言中,可以使用 time.LoadLocation() 函数来加载时区信息,以便将本地时间转换为指定时区的时间。同时,还可以使用 time.Parse() 函数来将字符串解析成时间对象,并使用 time.Format() 函数将时间对象格式化成指定格式的字符串。
package main |
当前时间(相对于上海): 2023-12-26 17:29:01.6119526 +0800 CST |
在上面的示例代码中,我们加载了纽约时区的信息,并将当前时间转换为纽约时区的时间。接着,我们使用 time.Parse()
函数将一个时间字符串解析成时间对象,再使用 time.Format()
函数将时间对象格式化成指定格式的字符串。
需要注意的是,时间格式字符串中的格式化符号必须是固定的,不能随意指定。常用的格式化符号如下: