system-time
计算机系统时间
我们常说的计算机系统(类Unix系统)时间是一个相对值,它表示距离1970年1月1日00:00:00
过去的秒数。
时间通常在程序中有时间戳和日期字符串两种表现形式。但是在计算机中其实只有一种,就是时间戳。使用时间戳是永远不会出问题,但是使用日期字符串某些时候就会出现问题。出现问题的原因一般就是因为省略了时区。
时区
我们生活中常常用日期字符串来表示时间,如下:
可能有些人在程序中也会使用日期字符串来初始化日期:
1 | new Date('2020-08-07 18:21:33'); |
很多情况下这样都没有问题,但是一旦用户分布在不同时区或修改系统时区时就会出现问题。上面的日期字符串其实隐含了一个条件时区
,比如我们生活中常说“今天下午五点见个面”这里隐含的条件就是大家都在东八区。
在东八区(北京时间)时,上面的时间等价于这个形式:
1 | new Date('2020-08-07T18:21:33+08:00'); |
但是在东九区(东京时间)它等价于:
1 | new Date('2020-08-07T18:21:33+09:00'); |
这两个时间并不是同一个日期。这就是日期字符串在夸时区出现问题的原因。
在实际开发中,我们应该避免使用简单字符串格式YYYY-MM-DD HH:mm:ss
表示日期,这是非常危险的。如果要使用字符串来存储和初始化日期应该加上时区,使用ISO 8601
格式的字符串YYYY-MM-DDTHH:mm:ss.sssZ
。
参考
本站采用「署名 4.0 国际」进行许可。