前言
- 从头捋捋,将时间捋明白。
- 计算机使用的是UTC时间。这里的计算机可以理解为:操作系统、BIOS、CMOS、数据库等。
计算机中日期、时间表示方法
UNIX认为1970年1月1日0点是时间纪元,现在的计算机世界沿用此规则。
比如:Java中,Date类构造方法的注释中说“使用 GMT(同UTC) 1970年1月1日0点作为时间纪元”。
/**
* Allocates a <code>Date</code> object and initializes it to
* represent the specified number of milliseconds since the
* standard base time known as "the epoch", namely January 1,
* 1970, 00:00:00 GMT.
*
* @param date the milliseconds since January 1, 1970, 00:00:00 GMT.
* @see java.lang.System#currentTimeMillis()
*/
public Date(long date) {...}
JavaScript 示例
var d = new Date(0); // 0是距 UTC 时间1970年1月1日0点的毫秒数
console.log(d.toLocaleString()); // 显示成本地时间
console.log(d.toString());
console.log(d.toUTCString()); // 显示成UTC时间(世界时间)
执行结果:
1970/1/1 上午8:00:00
Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
Thu, 01 Jan 1970 00:00:00 GMT
说明:
- 1970年1月1日0点是时间纪元。
- 除了操作系统外,还有编程语言、BIOS、数据库,均用计算机代表。
- 计算机使用的是UTC时间。系统时间指的就是这个。
- 计算机中用数字表示UTC时间,该数字是
距UTC时间1970年1月1日0点的毫秒数
。 - 计算机将数字表示的UTC时间转化为人类可读的时间。在JavaScript中用toUTCString()获取。
- 在JavaScript中toLocaleString()获取本地时区的本地时间。本地时区是由操作系统设置的。操作系统的时区设置成北京时间,就获得北京时间。上例中,数字0是UTC时间,运行代码的电脑设置的时区是北京时间,因此,toLocaleString()获得北京时间8点(此时的世界时间是0点)。
- 计算机中GMT时间视同UTC时间。
- 采用不同时区的数据进行数据交换时,最好采用标准时间格式(上例中输出的第1个时间无法在不同时区中进行数据交换)。
参考
计算机系统的时间
日期类的时间从为什么是从1970年1月1日
UTC
javascript字符串转日期类型
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date