有关机器时间、UTC时间、本地时间的总结

2019-09-25 14:34:38 浏览数 (2)

1. 时间的表达方式有两种,一种是 human time,比如我们所说的年月日等,一种是 machine time,比如我们用 System.currentTimeMillis() 方法获得的毫秒数。

2. machine time 表示的是从epoch时间(1970年1月1日0时0分0秒)开始到现在已经过了多少时间,注意这里的时间都是指UTC时间。

3. 对于任意给定的 machine time,都可以通过加上epoch时间,算出该 machine time 对应的UTC时间,即 machine time 和 UTC 时间是一一对应的。

4. 当 machine time 为0时,其对应的UTC时间就是epoch时间。

5. machine time 可以理解为是UTC时间的另一种表现形式,其本质上就是UTC时间。

6. human time 是一种用人类便于理解方式表示 machine time 的方法,当我们看到一个用年月日等表示的 human time 时,它其实是对 machine time 做的一种转换。

7. 由于机器只能获取 machine time,所以所有的human time其实都是要先获取 machine time,再在其基础上做各种计算得来的。

8. UTC 时间是 human time 时间的一种,所以要想获取当前时刻的 UTC 时间,也要先获取 machine time,再按照上述规则计算出来。

9. UTC 时间不受时区影响,对于给定的一个UTC时间,在全球任意地方都表示同一时刻。

10. UTC 时间也可以粗略的理解为时区为0的时间。

11. 由于machine time 和 UTC 时间的关系,machine time 也是不受时区影响的,即用 System.currentTimeMillis() 方法获取的一个 machine time,在全球的任意地方也都表示同一时刻。

12. human time还有一种形式就是本地时间,或者说是本地时区时间。

13. 本地时间和UTC时间的关系是,本地时间是在UTC时间的基础上,通过加减一定的时间得来的,加减的具体数值受所在时区影响。

14. 比如,中国所处时区为东8区,想要算中国境内的本地时间的流程是,先获取 machine time,根据 machine time 算出 UTC 时间,然后再在UTC时间基础上加8个小时,算出中国境内的本地时间。

15. 由于UTC时间并不适合表示全球所有地区的本地时间(比如,UTC时间的14点在某些地区可能是晚上),所以才有了本地时区时间这个概念。不同时区在同一时刻使用不同的本地时间,本质上是为了方便人们的日常生活。

16. 如果只有一个本地时间,而没有该时间对应的时区的话,是无法表示时间线上的某一时刻的,所以,在全球不同地区进行时间交换时,要么用UTC时间,要么用带有时区的本地时间。

17. 不管是UTC时间还是本地时区时间,它们都是 human time,即都可以通过一定规则与machine time 相互转换,区别就是不同的 human time 形式使用不同的转换规则。

18. 暂时想到这么多,如果后续还有其他总结,我们再做补充。

19. 完。

0 人点赞