程序代码中的时区问题
GMT(格林尼治时间)与 UTC
格林尼治时间(英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
格林尼治时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治平时基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代。
UTC 是 Coordinated Universal Time 的缩写,译为中文为“世界标准时间”,或“协调通用时间”/“协调世界时间”。UTC 根据原子钟计算时间,相比 GMT 更精确。
UTC 时间与北京时间换算
全球分为 24 个时区,东西各 12 区,相邻两个时区时间相差 1 小时,
北京是东八区,北京时间比 UTC 时间早 8 小时。
北京时间转化为 UTC 时间
计算公式
UTC + 时区差 = 本地时间
UTC +0800 = 北京时间(时区差东为正,西为负,东八区=+0800)
- 北京时间(09:42:22)转化为 UTC 时间
按照公式:0942 - 0800 = 0142
所以UTC 时间是凌晨的 1:42:22。
- 北京时间 (04:32)转化为 UTC 时间
0432 - 0800 = -0368(负号意味着是前一天)
即 UTC 时间是: -0368 + 2400 = 2032,既前一天晚上 pm 8:32 。
这里注意:如果结果是负数就意味着是 UTC 前一天,把这个负数加上2400就是UTC在前一天的时间。
时间的表达方式
比如时间 "updatedAt": "2019-01-25T07:10:06.893Z" 是什么意思?看了下面这个 时间格式的标准 就知道答案啦。
- 在零时区,并恰好与协调世界时(UTC)相同,那么在时间最后加一个大写字母 Z。Z 是相对协调世界时间 0 偏移的代号。
如下午2点30分5秒表示为14:30:05Z或143005Z;只表示小时和分,为1430Z或14:30Z;只表示小时,则为14Z。
- 其他时区用实际时间加时差表示。
当时的UTC+8时间表示为22:30:05+08:00或223005+0800,也可以简化成223005+08。
日期和时间的组合表示法
合并表示时,要在时间前面加一大写字母T.
如要表示北京时间2004年5月3日下午5点30分8秒,可以写成2004-05-03T17:30:08+08:00或20040503T173008+08。
综上,揭晓答案,"updatedAt": "2019-01-25T07:10:06.893Z" 表示 UTC 时间的2019 年1约25日7点10分06.893秒。
Unix 时间戳
时间戳(英语:Timestamp)是指字符串或编码信息用于辨识记录下来的时间日期。
Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间 1970 年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。Unix时间戳不仅被使用在Unix系统,也在许多其他操作系统中被广泛采用。