关键词:时区、时间戳、日期、夏令时、冬令时
一、日期时间
就是一个日期,比如现在是北京时间2023年3月5日14:25:20,在说起日期时间的时候,一定要说清楚是哪里的时间,因为不同国家之间因为地理位置的原因会有时差
正文:时区/地名 + 时间
扩展:通常在国内提到时间都是默认北京时间,但是新闻联播在播报国际新闻时都会加上地区前缀,不然会让人搞不清这个时间是北京时间还是报道的地区的时间。
二、时区
因为地球是自转的,不同国家地理位置(指经度)的不同,会导致一个地区是白天而另一个地区是黑夜的情况,所以在同一时刻,一个地区可能是白天10点,而另一个地区是晚上10点。
正文:国际上为了能对时间进行一个相对统一的管理,将地球按经度划分为24个时区,相邻时区间隔一个小时,地球自转一周刚好将24个时区转一遍。
扩展:国内经常说的北京时间其实是以地名来代表时区,北京在东八区,所以北京时间就是东八区时间,采用东八区时间的国家还有新加坡、马来西亚等。
三、时间戳
同一时刻,不同时区的日期时间不同,如果要记录一个日期时间,是一定要加上时区的,不然难登国际舞台。如果能记录下这一时刻的值,那不管是在哪个时区,都可以转换成对应的日期时间了。
正文:我们以历史上某一时刻为起点,记为0时刻,以秒为单位,任一时刻的值都可表达出来,过了n秒就是n时刻,将这个规则下的时刻值定义为时间戳。
扩展:将格林威治时间(零时区)1970年01月01日0时0分0秒定义为0时刻,即时间戳为0。有了这个定义,我就知道时间戳为0时,北京时间(东八区)为1970年01月01日8时0分0秒,东二区时间为1970年01月01日2时0分0秒。时间戳为2*60*60时,北京时间(东八区)为1970年01月01日10时0分0秒,格林威治时间(零时区)为1970年01月01日2时0分0秒。为了更精确的表达时间,现在时间戳有了毫秒单位。
练习一:
- 获取当前的日期时间,获取到的是啥?
获取到的是服务器所在时区的日期时间,在中国就是北京时间。
- 获取当前的时间戳,获取到的是啥?
获取到的是一个代表当前时刻的时间戳值,时间戳能准确的记录时间,但并不能很直观的展示时间,所以得到时间戳的值后通常根据时区转换成对应时区的日期时间,具有灵活性。
- 时间戳转成日期时间怎么转?
不管怎么转,一定要按时区来转,一般默认会获取当地时区来转成当地日期时间,但在处理国际业务时,一定要明确获取哪个时区的日期时间。
四、夏令时
由于地球的公转,夏天太阳升起早,冬天太阳升起晚。既然夏天太阳升起得早,那就得早点起来干活,充分利用白天的时间,早睡早起,节省点因照明消耗的能源。
正文:将夏天的日期时间人为的调快一个小时,调快后的时间称为夏令时时间。虽然还是8点起,但是实际你早起了一小时。国家干预时间,强制执行早睡早起。
扩展:只有部分国家实行夏令时制,中国之前也实行过,后来取消了。
五、冬令时
与夏令时对应,夏天将时间调快了一小时之后的时间称为夏令时,冬天就调回来,调回来后的正常时间就是冬令时。
正文:夏天调快了一小时,冬天就回拨一小时,将时间回到正常,回拨一小时后的时间就是冬令时。
扩展:实行夏令时制的国家一般在每年的二三月份的一天将时间向前调一个小时,那天只有23个小时。在每年的十月份左右的一天将时间回拨一小时,那天就会有25个小时。
练习二:
- 国家A在东八区,国家B在东六区,只有国家B实行夏令时,那么国家A与国家B之间相差几小时?
在夏令时期间,国家A与国家B相差1小时,比如国家A八点时(时区时间),国家B七点(夏令时时间);在冬令时期间,国家A与国家B相差2小时,比如国家A八点时(时区时间),国家B六点(时区时间/冬令时时间)。
六、总结
在开发过程中对于时间的处理,要考虑业务的属性。如果只是做国内的业务,那么无需考虑时区的影响,考虑太多只会增加多余成本。如果做的是国际业务,则一定要加上对时区和夏令时因素的考虑。