Go中的 time包中包含了方便的函数,用于操作 Unix时间(也被称为大纪元时间、Posix时间、大纪元以来的秒数或UNIX大纪元时间)。使用它们,你可以很容易地获得当前的Unix时间戳,将一个 time.Time结构转换为Unix时间,反之亦然--Unix时间戳转换为 time.Time.请看这个作弊表,学习如何做,并在你忘记的时候回来看看😉。
将日期/时间转换为Unix纪元时间
该 time.Time结构包含 Unix(), UnixMilli(), UnixMicro()和 UnixNano()方法,用于将时间对象转换为类型为int64 的 Unix 时间戳:
date := time.Date(2022, 6, 1, 0, 0, 0, 0, time.UTC)
fmt.Println(date.Unix())
fmt.Println(date.UnixMilli())
fmt.Println(date.UnixMicro())
fmt.Println(date.UnixNano())
输出:
1654041600
1654041600000
1654041600000000
1654041600000000000
获取当前的Unix时间戳
要在Go中获得当前的Unix时间戳,你只需要通过以下方法获得当前的时间类型 time.Time类型的当前时间,使用 time.Now()函数获得当前的Unix时间,然后用 Unix(), UnixMilli(), UnixMicro(), , 或 UnixNano()方法。
获取当前Unix/Epoch时间(秒:
fmt.Println(time.Now().Unix())
输出:
1657861095
获取当前的Unix/Epoch时间(以毫秒为单位
fmt.Println(time.Now().UnixMilli())
输出:
1657861095093
获取当前Unix/Epoch时间,以微秒为单位
fmt.Println(time.Now().UnixMicro())
输出:
1657861095093115
获取当前的Unix/Epoch时间(纳秒)。
fmt.Println(time.Now().UnixNano())
输出:
1657861095093117000
将Unix时间戳转换为 time.Time
该 time包有三个函数可以将int64 Unix的时间戳转换为一个 time.Time对象:
Unix(sec int64, nsec int64) Time将一个秒级的时间戳、纳秒级的时间戳或带有秒级和纳秒级的时间戳转换为一个time.Time对象。UnixMilli(msec int64) Time将毫秒级的时间戳转换为time.Time.UnixMicro(usec int64) Time将微秒级的时间戳转换为一个time.Time结构。
秒级Unix时间戳转换为 time.Time
var timestamp int64 = 1657861095
t := time.Unix(timestamp, 0)
fmt.Println(t.UTC())
输出:
2022-07-15 04:58:15 +0000 UTC
毫秒 Unix时间戳转换为 time.Time
var timestamp int64 = 1657861095093
t := time.UnixMilli(timestamp)
fmt.Println(t.UTC())
输出:
2022-07-15 04:58:15.093 +0000 UTC
微秒 Unix时间戳转换为 time.Time
var timestamp int64 = 1657861095093115
t := time.UnixMicro(timestamp)
fmt.Println(t.UTC())
输出:
2022-07-15 04:58:15.093115 +0000 UTC
纳秒 Unix时间戳转换为 time.Time
var timestamp int64 = 1657861095093117123
t := time.Unix(0, timestamp)
fmt.Println(t.UTC())
输出:
2022-07-15 04:58:15.093117123 +0000 UTC
从字符串解析Unix时间戳到 time.Time
要解析一个字符串的Unix时间戳并得到一个 time.Time对象,你必须首先将时间戳从字符串转换为int64 ,然后再将其转换为 time.Time使用 Unix(), UnixMilli(),或 UnixMicro()函数进行转换。
timeString := "1657861095"
timestamp, err := strconv.ParseInt(timeString, 10, 64)
if err != nil {
panic(err)
}
t := time.Unix(timestamp, 0)
fmt.Println(t.UTC())
输出:
2022-07-15 04:58:15 +0000 UTC