通常我们说的时间戳,就是指格林威治时间(GMT)1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数。
1970-01-01是根据Unix操作系统的诞生时间(1971-01-01,纪元时间)便于记忆得来的。
每增加一秒钟,时间戳就变化一下,最开始的设计是每1/60
秒就变化一下。
2^31-1
,即2147483647
单位是秒,换算成年是68年,很快就要不够用了。2^63-1
,即9223372036854775807
单位是纳秒,换算成年是292.471208677536
年目前看来还行。package main
import (
"fmt"
"time"
)
func main() {
now := time.Now() // 获取当前时间,2020-05-14 10:31:30.856251261 +0800 CST m=+0.000062967
timeStamp := now.Unix() // 获取时间戳,即从纪元时间到现在的秒数,1589423490
fmt.Println(now)
fmt.Println("timeStamp:", timeStamp)
fmt.Println("year:", timeStamp/60/60/24/365) // 简单计算一下,50年,没毛病
}
因此,如果时间设置的不正确,默认的时间零点为纪元时间(1970-01-01 00:00:00 +0000 UTC
),但是Go语言却是0001-01-01 00:00:00 +0000 UTC
,暂时不清楚这样的设计意图。
在Go语言中最小的时间单位是纳米,time
包中也定义了这些常量,如下:
type Duration int64
const (
Nanosecond Duration = 1
Microsecond = 1000 * Nanosecond
Millisecond = 1000 * Microsecond
Second = 1000 * Millisecond
Minute = 60 * Second
Hour = 60 * Minute
)
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林威治标准时间。
格林尼治平均时间(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
来张世界时区地图看看,更加直观一点。