时间与计算机毫秒数、时区、夏令时、冬令时
“现在是北京时间早上7点整”,这是我们经常听到的广播报时。程序员们在讨论时间时区会说:“现在某地区是晚上0点,对应我们的早上7点,比我们慢了7个小时。”站在一个计算机的角度上,这句话是不严谨的。平常我们说的“慢”,指时钟上的读数,只要时间与现实时间对应,无论在哪台计算机,都会得到同一个毫秒数,时间读数的差别出自时区的差异。例如:北京时间(UTC+0800)2018.1.1 10:00:00与日本时间(UTC+0900)2018.1.1 11:00:00,在现实上是同一时刻,计算机中也是同一个毫秒数,不存在谁比谁慢,时钟读数北京时间比日本时间慢1小时。
计算机毫秒数——自1970.1.1 00:00:00 UTC以来的毫秒数,由计算机提供,加上时区可转换成现实可读的时间。
时区——地球是自西向东自转,东边比西边先看到太阳,东边的时间也比西边的早,为了克服时间上的混乱而设立,规定英国(格林尼治天文台旧址)为中时区(零时区)、东1-12区,西1-12区。每个时区横跨经度15度,时间正好是1小时。最后的东、西第12区各跨经度7.5度,以东、西经180度为界。每个时区的中央经线上的时间就是这个时区内统一采用的时间,称为区时,相邻两个时区的时间相差1小时。
一般情况下,我们身处同一个时区,在交流时自动忽略时区,你会说:“晚上7点来我家吃饭吧”,但你不会说:“北京时间晚上7点来我家吃饭吧”。正是这种日常,导致我们需要在跨时区描述时间上不够严谨,上文说的“慢了7小时”正是缺少时区造成的。缺少了时区,仅有年月日时分秒便无法正确描述时间。
可能你感觉不到这个“慢”带来多大的影响,于是便不作出改变。但真正纠结的东西出现了——夏令时、冬令时。
夏令时、冬令时——在使用日光节约时制的地区,夏天时钟拨快一小时(夏令时,Daylight saving time),冬天再拨回标准时(冬令时,Stander time)
噩梦就在这时候开始,如果还用“慢”来描述,就会发现根本解释不清楚。
尝试一下:
1、为何切换到夏令时当天只有23个小时,切换到冬令时当天竟然有25个小时?
2、切换到冬令时,多出来的一个小时和前一个小时重叠了怎么办?
正确解释上面的两个问题,首先明确:冬令时和夏令时之间的切换不影响计算机毫秒数,只有时区上的变化;缺少了时区,仅有年月日时分秒便无法正确描述时间;不要用“慢”来解释时区、夏令时、冬令时。
美国2017年冬令时将于2017年11月5日当地时间早上02:00开始,我们用其中美国东部时区(EDT UTC-0400和EST UTC-0500)举例说明:2017.11.5 1:59:59 EDT这个时刻处于夏令时,下一秒切换到冬令时时钟为2017.11.5 1:00:00 EST,计算机毫秒数也显示过了1000毫秒,切换到冬令时当天有25个小时就是这么来的,同时也解决了多出来一个小时怎么描述。
小伙伴们明白了吗?切换到夏令时道理一样。有不懂可以留言,知无不言,就是回复稍慢。