07 时间戳

通常我们说的时间戳,就是指格林威治时间(GMT)1970 年 01 月 01 日 00 时 00 分 00 秒起至现在的总秒数

1970-01-01是根据Unix操作系统的诞生时间(1971-01-01,纪元时间)便于记忆得来的。

每增加一秒钟,时间戳就变化一下,最开始的设计是每1/60秒就变化一下。

时间戳的上限

  • 32位操作系统,能表示的最大整数是2^31-1,即2147483647单位是秒,换算成年是68年,很快就要不够用了。
  • 64位操作系统,能表示的最大整数是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
)

时区的概念

wikipedia

协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林威治标准时间。

格林尼治平均时间(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。

  • UTC-12(IDLW — 国际换日线)
  • UTC-11 (MIT — 中途岛标准时间)
  • UTC-10(HST — 夏威夷-阿留申标准时间)
  • UTC-9:30(MSIT — 马克萨斯群岛标准时间)
  • UTC-9(AKST — 阿拉斯加标准时间)
  • UTC-8(PST — 太平洋标准时间A)
  • UTC-7(MST — 北美山区标准时间)
  • UTC-6(CST — 北美中部标准时间)
  • UTC-5(EST — 北美东部标准时间)
  • UTC-4(AST — 大西洋标准时间)
  • UTC-3:30(NST — 纽芬兰岛标准时间)
  • UTC-3(SAT — 南美标准时间)
  • UTC-2
  • UTC-1(CVT — 佛得角标准时间)
  • UTC(WET — 欧洲西部时区,GMT - 格林威治标准时间)
  • UTC+1(CET — 欧洲中部时区)
  • UTC+2(EET — 欧洲东部时区)
  • UTC+3(MSK — 莫斯科时区)
  • UTC+3:30(IRT — 伊朗标准时间)
  • UTC+4(META — 中东时区A)
  • UTC+4:30(AFT — 阿富汗标准时间)
  • UTC+5(METB — 中东时区B)
  • UTC+5:30(IDT — 印度标准时间)
  • UTC+5:45(NPT — 尼泊尔标准时间)
  • UTC+6(BHT — 孟加拉标准时间)
  • UTC+6:30(MRT — 缅甸标准时间)
  • UTC+7(IST — 中南半岛标准时间)
  • UTC+8(EAT — 东亚标准时间/中国标准时间(BJT))我们在这里
  • UTC+9(FET — 远东标准时间)
  • UTC+9:30(ACST — 澳大利亚中部标准时间)
  • UTC+10(AEST — 澳大利亚东部标准时间)
  • UTC+10:30(FAST — 澳大利亚远东标准时间)
  • UTC+11(VTT — 瓦努阿图标准时间)
  • UTC+11:30(NFT — 诺福克岛标准时间)
  • UTC+12(PSTB — 太平洋标准时间B)
  • UTC+12:45(CIT — 查塔姆群岛标准时间)
  • UTC+13(PSTC — 太平洋标准时间C)
  • UTC+14(PSTD — 太平洋标准时间D)

来张世界时区地图看看,更加直观一点。

image

上次修改: 14 May 2020