Unix 时间戳表示的是从世界标准时间(UTC,Coordinated Universal Time)的 1970 年 1 月 1 日 0 时 0 分 0 秒开始的偏移量。
全球共有 24 个时区,分为东西各 12 时区。所有地区在使用同一个时间戳的基础上,根据当地时区调整时间的表示。
现在比较常见的日期和时间的表示标准是 ISO8601,或者在其基础上更加标准化的 RFC3339。
举个例子,北京时间 2021 年 1 月 28 日 0 时 0 分 0 秒用 RFC3339 表示为:2021-01-28T00:00:00+08:00
。
+08:00
表示东 8 区,2021-01-28T00:00:00
表示这个时区的人所看到的时间。加号如果改为减号,则表示西时区。
比较特殊的是 UTC 时区,可以表示为 2006-01-02T15:04:05+00:00
,但通常简化为 2006-01-02T15:04:05Z
。
在使用的时候,应当根据时区调整时间的展示。例如 1611792000
可以表示为 2021-01-28T00:00:00Z
或者 2021-01-28T08:00:00+08:00
。
不同的数据来源很可能使用不同的时间表示方法。根据是否可读分成两类:
- 用数字表示的时间戳
- 用字符串表示的年月日时分秒
数字类型就不详细说明。
字符串又根据是否有时区分为两类:
2021-01-28 00:00:00
没有包含时区信息2021-01-28T08:00:00+08:00
包含了时区信息
在解析没有包含时区信息的字符串时,通常要由程序员指定时区,否则默认为 UTC 时区。如果附带时区,那就可以不用另外指定。
例如 Golang 的时间库,就有两个方法:
Parse(layout, value string)
ParseInLocation(layout, value string, loc *Location)
在解析的时候,会先根据年月日时分秒计算出一个整数。接着看 value 是否包含时区信息。
如果 value 包含时区,那么就会给解析后的整数加一个偏移量,这个偏移量由时区与 UTC 时区之间的位置关系决定。
如果 value 不包含时区信息,Parse 会将其设置为 UTC 时区,ParseInLocation 会根据传入的时区调整解析出来的整数,并将时区设置为传入的时区。
这是一个系列教程:
- 单个视频生成二维码教程,请点击查看单视频二维码教程>>
- 多个视频生成列表二维码教程,请点击查看列表二维码教程>>
- 为视频添加密码观看权限教程,请点击查看密码观看权限教程>>