⌚ 在Go中将日期/时间转换为Unix纪元时间的实例

1,089 阅读3分钟

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时间戳转换为 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