时间的本质

2019-10-09  本文已影响0人  7d972d5e05e8

原文地址:https://blog.csdn.net/halfclear/article/details/77573956

时间的本质

链接:https://www.zhihu.com/question/27052407/answer/56923233

UTC是我们现在用的时间标准,GMT是老的时间计量标准。UTC是根据原子钟来计算时间,而GMT是根据地球的自转和公转来计算时间,也就是太阳每天经过位于英国伦敦郊区的皇家格林威治天文台的时间就是中午12点,。由于现在世界上最精确的原子钟50亿年才会误差1秒(最精确原子钟问世:50亿年误差一秒),可以说非常精确。而GMT因为是根据地球的转动来计算时间的,而地球的自转正在缓速变慢,所以使用GMT的话,总有一天,打个比方,中午12点,并不是一天太阳当头照的时候,很可能就是早上或者晚上了。所以说UTC更加精确。

个人理解 UTC 是标准时间参照,GMT(格林威治时间)、CST(北京时间)、PST(太平洋时间)等等是具体的时区。由于 UTC +0 的特殊性,所以有时也把 GMT 当成参照,以下写法等同:
GMT: UTC + 0 或者 GMT + 0
CST: UTC + 8 或者 GMT + 8
PST: UTC - 8 或者 GMT - 8

格林威治时间:1970年1月1日0点0分0秒,作为所有时间计算流逝量的起点。

我们说看到的时间:和时区紧密关联,对于全世界,当前相对格林威治时间流逝的时间都是一样的,但是由于时区不同,大家才看到不同的时间。

为了在计算机中传输,如果只传一个时间 2019-09-19 18:00:00给对方,对方不能精确它那边的时间是多少。所以,必须把时间和时区一起传给对方。但是如果传时间戳的话,大家都是用统一的标准,时间戳的起点是GMT 1970年1月1日0点0分0秒。那么大家拿到时间戳的话,可以任意在自己的时区转换为表示时间。

可以说,人们看到的时间,其实是依赖时间戳生成的,而时间戳由(原子钟的次数 - 标准的时间起点)。原子钟的产出就是一个精确的时间戳。

public static void main(String[] args){
        Long time = 1568857222306L;
        Date date = new Date(time);

        // 设置北京时区
        SimpleDateFormat bjSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        bjSdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

        // 设置东京时区
        SimpleDateFormat tokyoSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        tokyoSdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));

        // 设置伦敦时区
        SimpleDateFormat londonSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        londonSdf.setTimeZone(TimeZone.getTimeZone("Europe/London"));


        System.out.println("毫秒数:" + date.getTime() + ", 北京时间:" + bjSdf.format(date));
        System.out.println("毫秒数:" + date.getTime() + ", 东京时间:" + tokyoSdf.format(date));
        System.out.println("毫秒数:" + date.getTime() + ", 伦敦时间:" + londonSdf.format(date));
    }

所以,时间戳是没有时区概念的,所有的时间戳都是距离1970-01-01 00:00:00这个标准时间点,所流逝的秒数或者毫秒数
比如现在时间北京时间2020-05-19 12:00:00得到的时间戳1589860800000。我把它立即传给美国那边,用new Date(1589860800000),生成时间字符串,生成的时间是:2020-5-19 00:00:00。相同时间戳,在不同时区,展示的时间不一样。这是因为时间戳的生成,在全球范围内都是基于CMT标准时间1970-01-01 00:00:00这个时间点计算得出的。既然大家都在地球上,那么我们流逝的时间肯定都是一样的,不管你在中国还是美国。但是基于这个唯一的时间戳,展示的时间字符串确和时区相关,不同时区展示的时间不一样。

上一篇 下一篇

猜你喜欢

热点阅读