闲谈时间


背景

一般来说,对于后台开发来说,经常会遇到时间。做业务之中使用的标准时间、当地时间、当前时间、机器时间。但是我们真的了解这几个词代表的准确意义吗?

  • 标准时间:一般指格林尼治天文台的时间就是世界标准时间。
  • 当地时间/当前时间:所谓的当前/当地时间其实都是有一个参照的,是标准时间+所在的时区时间。
  • 机器时间:所谓的机器时间是指机器安装系统的系统时间。

问题:

那么问题来了,你的时间用对了吗?

  1. 一般来说,我们经常使用的是当前时间:前端的new Date()、系统的time(NULL)、数据库的CURRENT_TIME,但是当系统时间不同步时时间不再拥有任何意义,此时不能用这些时间作为依靠。

  2. 我们使用的用对了吗?究竟该用当前时间还是标准时间

  • 当我们租用外国服务器时,系统时间是我们想要的吗?
  • 当我们的服务国际化的时,我们用户的时间跟我们的服务时间对的上吗?
  • 我们的web端、app端、服务端、数据库端、多个位置的时间对的上吗?

举例

我们的服务中常用的是当前时间,一般使用uint64_t存储数值。假设DB中有个字段的类型是timestamp,用来表示起始时间:1970-01-01 00:00:00。 那么系统查询回来并转成uint64_t,结果是?