数仓是如何与“夏令时”愉快的玩耍?

华为云开发者社区
English
摘要:主要讲述夏令时的起源,发展,标准化以及如何在GaussDB中查询任一时区的夏令时规则。

本文分享自华为云社区《DWS如何与“夏令时”愉快的玩耍!》,原文作者:leapdb 。

1. 背景介绍

为了更深刻理解夏令时,我们先看一则纠结不休的新闻:

新华网莫斯科7月9日电(记者曹妍)俄罗斯联邦委员会(议会上院)9日通过法案,确定从今年10月26日开始,俄罗斯全国时区将在目前基础上向后推迟一个小时。以首都莫斯科为例,目前时间比格林尼治时间早4个小时,10月26日之后,莫斯科时间将比格林尼治时间早3个小时。

该法案此前已经经过国家杜马(议会下院)通过,预计俄总统将很快签署法案。这是俄罗斯2011年永久使用夏令时后再一次变更时制。俄罗斯幅员辽阔,横跨众多时区,社会一直就如何使用“合理时间”争论不休。而这次时制调整,也不是让所有人都很满意。

出于节能考虑,原苏联及俄罗斯曾经使用过三十年的夏令时。夏令时也称夏时制,指的是在天亮早的春夏季将时间向前调一个小时,其初衷是为了更充分地利用阳光。在很多高纬度地区,春夏季太阳升起时间明显比冬季早,夏时制使人早起早睡,减少因照明消耗的能源。

俄罗斯自1981年至2011年规定使用夏令时。每年3月最后一个星期日,时钟被拨快一个小时;每年10月最后一个星期日,时钟被拨慢一个小时。以首都莫斯科为例,夏令时间比格林尼治时间早4个小时,非夏令时间比格林尼治时间早3个小时。

不过,人们对于夏令时的利弊问题一直存在争议。对于现代社会来说,夏时制是否能节省能源消耗的总量尚无定论。另外,医学专家对于每年两次改变时间对人体生物钟影响有多大也各持意见。

从2011年开始,俄罗斯停止使用冬夏时制转换。时任总统2011年下令,当年夏令时结束后不再将钟表调慢一个小时,并永久使用夏令时间,这意味着俄罗斯全国时区提前一个小时,莫斯科时间全年都比格林尼治时间早4个小时。时任总统解释说,频繁调整时间打乱了人体生物周期,让人感到压力,容易生病。

对于幅员辽阔的俄罗斯来说,永久使用夏令时可以使不同地区的居民多获得部分阳光。但是俄罗斯大部分地区纬度高,冬季时天亮得比较晚,仍然使用夏令时迫使人们需要在黑暗中起床上班,给生活造成一定困难。

永久使用夏令时两年多以来,赞成者越来越少。在停止使用夏时制的2011年当年,俄罗斯独立民调机构列瓦达中心的民调显示,63%的受访者支持永久使用夏令时。不过该调查机构去年10月所做民调显示,赞成此举的受访者比例降低到41%。

2012年至今,曾先后有多名议员提交变更时制的议案。在因各种原因多次推迟讨论后,国家杜马6月终于开始正式讨论变更时制的法案,并确定从永久使用夏令时变为永久使用“冬季时间”。不过这也没有让所有人都满意。稍早前一项民调显示,支持使用夏令时和支持使用“冬季时间”的受访者各占约1/3,另外有1/3的受访者表示无所谓。

可见,夏令时一直是一个争论不休的事情,究竟要不要采用夏令时,我们还需要从它的起因及社会发展程度来细看。

2. 什么是夏令时,夏令时的创建、起因及利弊

夏令时,也叫夏时制,夏时令(Daylight Saving Time:DST)又称为“日光节约时制”,在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。

夏令时产生及逐步被多个国家所采用的过程:

  1. 美国杰出的政治家、外交家——富兰克林(被印在100美元钞票上的人物),在法国任美国驻法国大使期间,由于习惯于当时美国农村贵族的早睡早起生活,早上散步时看到法国人10点才起床,夜生活过到深夜。

这样与法国人交流、工作的时间就会很少,在他看来这是很浪费时间的。于是他在1784年给《巴黎杂志》的编辑写了一封信,信上说法国人的生活习惯浪费了大好的阳光,建议他们早睡早起,说每年可以节约6千4百万磅蜡烛。

  1. 1907年,英国建筑师威廉·维莱特(William Willett)才正式向英国议会提出夏令时的构思,主要是为了节省能源和提供更多的时间用来训练士兵,但议会经过辩论没有采纳。
  2. 1916年,德国这个崇尚节约、讲究环保的国家,率先站出来尝试,在全国这项计划,结果每天果真能节约下15%的煤、电等资源。
  3. 英国因为怕德国会从中得到更大的效益,因此紧跟着也采取了夏令时,夏令时节约了约15%的煤气和电力。
  4. 在英德都采纳夏令时后,法国不久也效仿实行。

6 1917年,俄罗斯第一次实行了夏令时。

  1. 1918年,参加了第一次世界大战的美国也实行了夏令时,但战后立即取消了。
  2. 1942年,第二次世界大战期间,美国又实行了夏令时。1945-1966年由各州自己确定使用夏令时的起始与结束时间(日期)。1966年,美国联邦政府重新统一了夏令时的起始与结束时间(日期)。
  3. 欧洲大部分国家从1976年,即第四次中东战争导致首次石油危机(1973年)3年后开始实行夏令时。
  4. 看到了夏令时的益处,接下来,全世界的110个国家先后实行,包括中国。

可见,省钱是个人人都喜欢的好事情。

夏令时的优点

为什么说,夏令时更够节省能源?众所周知,夏天是一年四季中,天亮得较早、天黑得较慢的一个季节,夜晚比较短,白昼比较长。那么,如果大家能够在夏天早起、并晚睡一个小时,将能充分利用好自然光照资源,那么,就能把照明用电给节省下来。而整个夏天,每人将能节省下巨额能源。

夏令时的缺点

  1. 当夏令时开始和结束时,人们必须将所有计时仪器调快或调慢,这在以前大家都还使用机械手表或功能手机的年代事件很麻烦的事情。
  2. 当夏令时结束时,某些时间会在当天出现两次,这些都容易构成混乱。并且影响航班的时间。

夏令时比较适合高纬度地区,因高纬度地区太阳在夏季升起的时间,明显比冬季要早,因此夏令时的实行效果会很好。可是在低纬度地区就不一样了,不仅实行夏令时的效果不大,还会带来许多负面影响。

比如,低纬度地区夏天的夜晚是湿热、闷热的,让人难以入眠。而到了清晨则比较凉爽舒适,正是安稳睡眠的好时间,这时候如果要早起,就会降低人们的睡眠质量,导致人的精神萎靡,从而影响工作质量,且有损身体的健康,并让人的情绪变得较为烦躁,出现一系列不良的反应。而中国,正是一个低纬度国家,所以不适合实行夏令时。

另外,中国还是一个地域辽阔的国家,因此跨越5个时区,从东向西看,就相差了5个小时。如果再被统一要求提前1个小时起床,像东部地区还好些,可像西部地区,相当于天没亮就起床了……如此,睡眠质量受到影响不说,由于起床时天还没亮,也不可能抹黑洗刷吃早点,那么该使用的照明用电,照样会消耗。
而中国的很多城市在夏天热得像个大火炉,说明在中国夏季,最耗电的不是用于照明,而是用于制冷!那么,如果中国实行夏令时,尤其是大量风扇、空调出现并普及后,要是为节省照明用电而消耗制冷用电,反而得不偿失。

夏令时的本意是早睡早起,充分利用阳光,而调快或调慢所有计时仪器,达到这一目的,无疑是最不恰当的,好比掩耳盗铃。我们应该做的是调整适合的作息时间,养成随手关灯等日常节能环保方式。

3. 我国使用夏令时的历史

看到了夏令时的益处,全世界的110个国家先后实行夏令时,包括中国,为加速经济发展、节约能源,便在1986年4月,发布了在全国实行夏令时的通知,所参照的是国外成熟的相关方案。不过在实行6年之后,也就是1991年时,我国便对夏令时喊停了。

下表是我国以前执行夏令时的时间表:

  • 1935年至1951年,每年5月1日至9月30日。
  • 1952年3月1日至10月31日。
  • 1953年至1954年,每年4月1日至10月31日。
  • 1955年至1956年,每年5月1日至9月30日。
  • 1957年至1959年,每年4月1日至9月30日。
  • 1960年至1961年,每年6月1日至9月30日。
  • 1974年至1975年,每年4月1日至10月31日。
  • 1979年7月1日至9月30日。
  • 1986年4月13日至9月14日,
  • 1987年4月12日至9月13日,
  • 1988年4月10日至9月11日,
  • 1989年4月16日至9月17日,
  • 1990年4月15日至9月16日,
  • 1991年4月14日至9月15日。

4. GaussDB(DWS)中如何查询某个国家的夏令时

4.1. GaussDB(DWS)中时区相关系统表

pg_timezone_names - GaussDB(DWS)中存储时区信息的系统表

pg_timezone_abbrevs - GaussDB(DWS)中存储时区简称信息的系统表

4.2. 查询当前(2021/03/05)已经开始使用夏令时间的时区信息

从 pg_timezone_names 查询当前(2021/03/05)已经开始使用夏令时间的时区信息:

postgres=# select * from pg_timezone_names where is_dst='t';
         name          | abbrev | utc_offset | is_dst 
-----------------------+--------+------------+--------
 Australia/NSW         | AEDT   | 11:00:00   | t
 Australia/South       | ACDT   | 10:30:00   | t
 Australia/Yancowinna  | ACDT   | 10:30:00   | t
 Australia/Broken_Hill | ACDT   | 10:30:00   | t
 Australia/Lord_Howe   | +11    | 11:00:00   | t
 Australia/ACT         | AEDT   | 11:00:00   | t
 Australia/Melbourne   | AEDT   | 11:00:00   | t
 Australia/Adelaide    | ACDT   | 10:30:00   | t
 Australia/LHI         | +11    | 11:00:00   | t
 Australia/Currie      | AEDT   | 11:00:00   | t
 Australia/Hobart      | AEDT   | 11:00:00   | t
 Australia/Tasmania    | AEDT   | 11:00:00   | t
 Australia/Sydney      | AEDT   | 11:00:00   | t
 Australia/Canberra    | AEDT   | 11:00:00   | t
 Australia/Victoria    | AEDT   | 11:00:00   | t
 NZ                    | NZDT   | 13:00:00   | t
 NZ-CHAT               | +1345  | 13:45:00   | t
 Europe/Dublin         | GMT    | 00:00:00   | t
 Eire                  | GMT    | 00:00:00   | t
 Chile/Continental     | -03    | -03:00:00  | t
 Chile/EasterIsland    | -05    | -05:00:00  | t
 Antarctica/McMurdo    | NZDT   | 13:00:00   | t
 Antarctica/South_Pole | NZDT   | 13:00:00   | t
 America/Asuncion      | -03    | -03:00:00  | t
 America/Santiago      | -03    | -03:00:00  | t
 Pacific/Apia          | +14    | 14:00:00   | t
 Pacific/Chatham       | +1345  | 13:45:00   | t
 Pacific/Easter        | -05    | -05:00:00  | t
 Pacific/Auckland      | NZDT   | 13:00:00   | t
 Pacific/Norfolk       | +12    | 12:00:00   | t
(30 rows)

从 pg_timezone_abbrevs 查询当前(2021/03/05)已经开始使用夏令时间的时区信息:

postgres=# select * from pg_timezone_abbrevs where is_dst='t';
 abbrev | utc_offset | is_dst 
--------+------------+--------
 ACDT   | 10:30:00   | t
 ACSST  | 10:30:00   | t
 ADT    | -03:00:00  | t
 AEDT   | 11:00:00   | t
 AESST  | 11:00:00   | t
 AKDT   | -08:00:00  | t
 ALMST  | 07:00:00   | t
 AWSST  | 09:00:00   | t
 AZOST  | 00:00:00   | t
 BDST   | 02:00:00   | t
 BRST   | -02:00:00  | t
 BST    | 01:00:00   | t
 CADT   | 10:30:00   | t
 CDT    | -05:00:00  | t
 CEST   | 02:00:00   | t
 CETDST | 02:00:00   | t
 CHADT  | 13:45:00   | t
 CLST   | -03:00:00  | t
 CLT    | -03:00:00  | t
 EASST  | -05:00:00  | t
 EAST   | -05:00:00  | t
 EDT    | -04:00:00  | t
 EEST   | 03:00:00   | t
 EETDST | 03:00:00   | t
 EGST   | 00:00:00   | t
 FJST   | 13:00:00   | t
 FNST   | -01:00:00  | t
 IDT    | 03:00:00   | t
 KDT    | 10:00:00   | t
 KGST   | 06:00:00   | t
 LHDT   | 11:00:00   | t
 MDT    | -06:00:00  | t
 MEST   | 02:00:00   | t
 MESZ   | 02:00:00   | t
 METDST | 02:00:00   | t
 MSD    | 04:00:00   | t
 MUST   | 05:00:00   | t
 NDT    | -02:30:00  | t
 NZDT   | 13:00:00   | t
 PDT    | -07:00:00  | t
 PKST   | 06:00:00   | t
 PMDT   | -02:00:00  | t
 PYST   | -03:00:00  | t
 PYT    | -03:00:00  | t
 SADT   | 10:30:00   | t
 ULAST  | 09:00:00   | t
 UYST   | -02:00:00  | t
 UZST   | 06:00:00   | t
 WADT   | 08:00:00   | t
 WDT    | 09:00:00   | t
 WETDST | 01:00:00   | t
 WGST   | -02:00:00  | t
 YEKST  | 06:00:00   | t
(53 rows)

4.3. GaussDB(DWS)中查询某个时区采用夏令时的历史记录

在GaussDB(DWS)中我们可以通过SQL查询当前某个时区是否已经采用夏令时间的信息,但是我们如果想知道某个时区在历史上都哪些时间使用过夏令时,我们可以借助外部工具来实现。
image.png

zdump 是一个linux操作系统自带的二进制时间文件解析工具。通过它我们可以解析一个二进制时区文件,查看某个时区相对于UTC的时间差以及夏令时规则。

GaussDB(DWS)中采用与GNU一致的标准时区数据信息库,因此GaussDB(DWS)中的二进制时区文件也可以使用该工具来解析。从上图中我们可以看出我国采用夏令时的历史。

5. 总结

综上,GaussDB(DWS)作为一款面向全球用户的高性能分析型数据库产品,对夏令时的支持也是符合工业界标准规范的。GaussDB(DWS)中自带时区信息库,可以简易方便的查询夏令时信息。

想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技~

点击关注,第一时间了解华为云新鲜技术~

阅读 267

开发者之家
华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态...

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态...

1.1k 声望
1.6k 粉丝
0 条评论
你知道吗?

华为云开发者社区,提供全面深入的云计算前景分析、丰富的技术干货、程序样例,分享华为云前沿资讯动态...

1.1k 声望
1.6k 粉丝
宣传栏