课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
时区问题一般来说程序员都是不需要去考虑的,因为大部分的软件开发都是在国内使用的,但是如果遇到了跨地域的问题的话,程序员又应该如何解决呢?下面我们就一起来了解一下具体情况吧。
GMT时间:格林尼治标准时间(英语:GreenwichMeanTime,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台当地的平太阳时,因为本初子午线被定义为通过那里的经线。
由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治平时基于天文观测本身的缺陷,已经被原子钟报时的协调世界时(UTC)所取代。
UTC时间:协调世界时(英语:CoordinatedUniversalTime,法语:TempsUniverselCoordonné,简称UTC)是主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定。
UNIX时间戳:Unixtime又叫POSIXtime或UNIXEpochtime,是从UTC时间1970年1月1日起到现在的秒数,不考虑闰秒,一天有86400秒。
时区:时区是地球上的区域使用同一个时间定义。世界各个国家位于地球不同位置上,因此不同国家特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
闰秒:闰秒是在协调世界时(UTC)中增加或减少一秒,使它与平太阳时贴近所做调整。在UTC时间中,有时会出现一分钟有59秒或61秒。
夏令时:美国原本于每年4月的一个星期日凌晨2时起至10月的后一个星期日凌晨2时实施夏时制;但经美国国会2005年通过的能源法案,自2007年起延长夏时制,开始日期从每年4月的一个星期日,提前到3月的二个星期日,结束日期从每年10月的后一个星期日,延后到11月的一个星期日。美国夏时制实行与否,完全由各州各郡自己决定。
概念解读
通过上面的概念介绍了解到,GMT就是0时区的时间,以前是标准,但现在国际上已经用UTC取代他了。在写程序时,可以认为UTC和GMT是等价的。为了严谨只需要关心UTC时间。
UNIX时间戳是程序中常用的,他的特点是和UTC时间的1970年1月1日到现在的秒数,和时区无关,无论在地球上的那个角落,同一时刻,UNIX时间戳都是一样的。是一个通用的时间偏移度量,计算每个时区当地时间时,都可以用时间戳推算出来。
不同时区的时间,都用UTC时间的偏移来计算。例如北京是东八区,比UTC时间快8个小时,所以计算北京时间,就在UTC时间的基础上加8个小时实现。
我们在调用系统函数展示时间时,底层是根据UNIX时间戳转换为UTC时间,再加上偏移的小时数,就得出了程序要用的当地时间。
UNIX时间戳可以映射到每个时区的当地时间,如果程序涉及到两个时区的时间转换,好的方法是存储UNIX时间戳,在使用的时候再做转换。
在各种语言的函数库中,都已经定义了时间时区转换的函数。在使用时,还有一点要注意「时区偏移(timeoffset)」和「时区地区(timezone)」是两个不同的概念。
偏移是一个数学上的值,直接能计算出时间。时区地区,会根据当地的法律规则,来得出终的时间,混入了人为的规则。
例如:
在夏令时时,北京和纽约时差是12个小时,但是当夏令时结束时,北京和纽约的时差是11个小时。如果一直用固定的时间偏移,就会计算出错。如果用指定的地区当参数,就会根据当地规则返回正确时间。
节选:架构学而思
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。