一次解决时区所有疑问

  时间与计算机毫秒数、时区、夏令时、冬令时

  “现在是北京时间早上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个小时就是这么来的,同时也解决了多出来一个小时怎么描述。

  小伙伴们明白了吗?切换到夏令时道理一样。有不懂可以留言,知无不言,就是回复稍慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值