时间:UTC时间、GMT时间、本地时间、Unix时间戳
1.UTC时间 与 GMT时间
我们可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。
2.UTC时间 与 本地时
UTC + 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
UTC + (+0800) = 本地(北京)时间 (1)
那么,UTC = 本地时间(北京时间))- 0800 (2)
3.UTC 与 Unix时间戳
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。
So,时间戳(比如MySQL中的TIMESTAMP)是带时区信息的,但是转成date也是自动带时区的。
MySQL中的DATETIME是不带时区信息的,直接讲就是存进去什么,取出来就是什么。同样,Java中的Date、Time也是不带时区信息的。
那么,问题来了,如何get正确的时间??
假如当前时区是东八区,即本地时间是北京时间,我们存储的是UTC时间(),那么我们看到的这个存储的值就是——当前时间减去八个小时。
继续,为什么要存储UTC时间??
因为——国际化!!
想象一下,有一天,我们的程序运行在世界各地,如果程序中总是拿到当前时间就存储,当你访问伦敦的节点,或者加利福尼亚的节点,或者新加坡的节点,如何协调统一,岂不是乱了套了??
而,如果我们都用UTC时间存储,当世界各个节点的时间都在一个时区进行显示时,所有节点的UTC时间都只需要加减同一个数字就可以了!!








网友评论