关于时区:关于数据库时区这么多奥秘你都知道么

26次阅读

共计 12553 个字符,预计需要花费 32 分钟才能阅读完成。

摘要: GaussDB(DWS)中对于时区相干常识及应用的介绍。

本文分享自华为云社区《人人都晓得的时区,背地居然有这么多神秘》,原文作者:leapdb。

背景介绍

时区同其它工业规范一样,标准化过程也是一个简单而漫长的过程。GaussDB(DWS)作为一款面向寰球用户的高性能剖析型数据库产品,对时区的反对也是合乎工业界标准规范的 。上面从时区概念,GaussDB(DWS) 时区应用及原理,以及一些常见问题等方面介绍一下 GaussDB(DWS)。

心愿对大家理解 GaussDB(DWS)和时区概念有所帮忙。

概念篇

在以前寰球国家都处于农业社会的时候,人们通过每天察看太阳的地位来决定工夫,这就使得不同经度的中央有不同的工夫。过后人们旅行次要靠走和马匹,不同中央工夫不统一的问题没有那么突出。然而到了十九世纪随着火车的创造,人们一天旅行的间隔一下子缩短了很多,到不同的中央因而迫切需要一个通用的办法把各个中央的工夫对立起来。1853 年 8 月 12 日,美国东部罗德岛州,两辆火车迎头相撞,14 人因而死亡。事变的起因在明天看来难以置信——两车工程师的手表差了 2 分钟。

  • 1863 年,首次应用时区的概念。时区通过设立一个区域的规范工夫局部地解决了这个问题。
  • 1870 年代加拿大铁路工程师弗莱明首次提出全世界按统一标准划分时区。
  • 1883 年 11 月 18 日,美国铁路部门正式施行五个时区。
  • 1884 年华盛顿子午线国内会议正式通过驳回这种时区划分,称为世界规范时制度。因而,世界标准时区的诞生同其它寰球规范一样也是有一个迟缓的倒退过程。

1 名词解释

时区 时区是地球上的区域应用同一个工夫定义。以前,人们通过观察太阳的地位(时角)决定工夫,这就使得不同经度的中央的工夫有所不同(中央时)。1863 年,首次应用时区的概念。时区通过设立一个区域的规范工夫局部地解决了这个问题。世界各个国家位于地球不同地位上,因而不同国家,特地是货色跨度大的国家日出、日落工夫必然有所偏差。这些偏差就是所谓的时差。

格林尼治规范工夫 GMT(Greenwich Mean Time)是指位于英国伦敦市区的皇家格林尼治天文台的规范工夫,因为本初子午线被定义为在那里通过的经线。因为地球在它的椭圆轨道里的静止速度不平均,地球每天的自转是有些不规则的,而且正在迟缓加速。所以,格林尼治工夫曾经不再被作为规范工夫应用。

世界协调工夫 UTC(Coordinated Universal Time)是通过均匀太阳时(以格林威治工夫 GMT 为准)、地轴静止修改后的新时标以及以「秒」为单位的国内原子时所综合精算而成的工夫。UTC 比 GMT 来得更加精准。对于现行表款来说,GMT 与 UTC 的性能与精确度是没有差异的。

夏日节约工夫 DST(Daylight Saving Time)又称日光节约时制,在英国称为夏令时间(Summer Time)。是一种为节约能源而人为规定中央工夫的制度,在这一制度履行期间所采纳的对立工夫称为“夏令时间”。个别在天黑较早的冬季人为将工夫调快一小时,能够使人早起早睡,缩小照明量,以充分利用光照资源,从而节约照明用电。各个驳回夏时制的国家规定不同。

时区表示法 如果工夫是以协调世界时(UTC)示意,则在工夫前面间接加上一个“Z”(不加空格)。“Z”是协调世界时中 0 时区的标记。因而,“09:30 UTC”就写作“09:30Z”或是“0930Z”。“14:45:15 UTC”则为“14:45:15Z”或“144515Z”。UTC 工夫也被叫做祖鲁工夫,因为在北约音标字母中用“Zulu”示意“Z”。

UTC 偏移量 UTC 偏移量是协调世界时(UTC)和特定地点的日期与工夫差别,其单位为小时和分钟。它通常以 ±[hh]:[mm]、±hh、或 ±[hh] 的格局显示。所以,如果被形容的工夫比 UTC 早一小时(例如柏林的夏季工夫),UTC 的偏移量将是”+01:00”、”+0100”、或简略显示为”+01”。

各国工夫调整

  1. 摩洛哥在 2010 年开始将夏令时开始工夫从 6 月 1 日调整为 5 月 2 日,完结工夫从 8 月 21 日调整为 8 月 8 日
  2. Tunisia 从 2010 年开始废除夏令时
  3. 麦夸里岛位于澳洲与南极洲之间决定从 2010 年 4 月 4 日开始不在追随澳洲其它地区一起采纳夏令时,由此产生新的时区 Antarctica/Macquarie,简称 MIST
  4. 朝鲜 – 2018 年 5 月 5 日起调整时区,时区由 GMT+8:30 改为 GMT+9:00,因而平壤的规范工夫于 2018 年 5 月 5 日星期六 00:00:00 工夫改为 00:30:00 拨快 30 分钟。当格林威治 GMT 规范工夫是凌晨 0:00,平壤工夫就是上午 9:00,与韩国和日本同一时区。
  5. 朝鲜 – 2015 年 8 月 15 日起,弃用 GMT+9,“复原”大韩帝国时代的 GMT+8:30 规范工夫,新启用的工夫比原来的工夫慢 30 分钟,是世界上惟一正在应用这个时区的国家。当格林威治 GMT 是凌晨 0:00,平壤工夫就是上午 8:30。
  6. 智利 – 2015 年 1 月 28 日,智利採用了新的官网规范工夫,他们把原来的规范工夫和夏令时间合併成一个,永恒採用夏令时制。新的官网工夫在智利大陆改为 GMT-3,復活节岛则为 GMT-5。
  7. 俄罗斯 – 2014 年 10 月最初一个星期日 (2014 年 10 月 26 日) 凌晨开始,永恒採用冬令时制,全国会拨慢一小时。因而莫斯科工夫将由 GMT+ 4 改为 GMT+3。

可见,不论是时区还是夏令时都会常常扭转。

2 通用工夫格局

次要参考 Posix 1003.1 Section 8.3。操作系统中 TZ 环境变量代表时区信息,次要用于 ctime、localtime、mktime 等等。TZ 时区名字有两种模式:时区名格局和 POSIX 时区格局。

2.1 时区名格局

:characters 该种模式以冒号开始,前面的字符解决与实现相干。linux 上示意从某个文件读时区信息,例如 TZ=”:Pacific/Auckland”。

2.2 POSIX 时区格局

不以冒号开始的格局都算此种格局,扩大开来如下,[]里的字段代表是可选的:std offsetdst[offset, enddate[/time]]]

格局:std offset[dst[offset][,startdate[/time], enddate[/time]]]

各字段含意如下:

  1. std && dst 代表标准时区和日光节约制时区,std 是必须的,dst 是可选的(有 dst 字段则代表反对夏令时)。这两个字段有两种格局:
  • a. 一种带援用符号 <>,援用符号内的字符串能够是字母、数字、+、-,解析时不蕴含援用符号 <>;
  • b. 另一种不带援用符号 <>,字符串只能是字母。

字段长度大于等于 3,小于等于 TZNAME_MAX(linux 是 6),如果字符串长度不符合规定,解析规定未定义(linux 不辨认)。

  1. offset 代表本地工夫加上多少能失去 UTC 工夫。

格局为 hh[:mm[:ss]],0<=hh<=24,0<=mm&&ss<=59。hh 是必须的,并且能够是 1 位,mm 和 ss 是可选的。

  • 如果后面带了一个加号 +,示意本初子午线以西。示意本工夫加上多少工夫能力失去 UTC 工夫。加号 + 也可不带。
  • 如果后面带了一个减号 -,示意本初子午线以东。示意本工夫减去多少工夫能力失去 UTC 工夫。

std 前面的 offset 是必须的,dst 前面的 offset 是可选的,如果没有,则默认比规范工夫提前一小时。

  1. rule 示意什么时候开始夏令时,什么时候完结夏令时,协定没有提到怎么解决没有 rule 的状况,从 linux 零碎来看,没有 rule 默认按 M3.2.0/02:00:00,M11.1.0/02:00:00 解决。

格局为 date[/time],date[/time]。date 有三种模式:

a. Jn,1 <= n <= 365,不包含平年的 2 月 29 日;
b. n,0 <= n <= 365,包含平年的 2 月 29 日;
c. Mm.n.d,m 示意哪个月份(1 <= m <= 12),n 示意一个月的第几周(1 <= n <= 5),5 代表最初一个,d 示意一周的第几天(0 <= d <= 6,从周日开始)。

  1. time 格局与 offset 雷同,除了没有 + 和 -,如果没带 time 字段,则默认为 02:00:00。

举例:”UTC-8:00:00DST-09:00:00,M3.2.0/02:00:00,M11.1.0/02:00:00″
示意本地工夫为 UTC 以东减 8 小时,反对夏令时且夏令时为 UTC 减 9 小时(及提前一小时),夏令时从 3 月第 2 周第 0 天凌晨 2 点开始,到 11 月第 1 周第 0 天凌晨 2 点完结。
CST6CDT,M3.2.0/2:00:00,M11.1.0/2:00:00

POSIX 时区格局因为无奈示意不应用公历的工夫(比方希腊),因而并未被宽泛采纳。

3 通用时区数据库

各地的时区和夏令时规定由各自的政府独立治理,他们常常在无限的告诉下进行变更。而且他们历史数据和将来打算也只是断断续续的记录下来。通用时区数据库试图组织和整顿这一畛域相干的数据。

时区数据库,通常称为 tz, tzdata 或 zoneinfo,是一组蕴含大量代码和数据用来示意寰球许多有代表性的地点的本地工夫的历史信息,他会依据各个政体对时区边界和夏令时规定的扭转而不定期的更新。数据库中每一个条目都代表这自 1970 年以来被宽泛认可的民用时钟的时区信息。该数据库被很多我的项目援用,比方:the GNU C Library (used in GNU/Linux), Android, FreeBSD, NetBSD, OpenBSD, Chromium OS, Cygwin, MariaDB, MINIX, MySQL, webOS, AIX, BlackBerry 10, iOS, macOS, Microsoft Windows, OpenVMS, Oracle Database, 和 Oracle Solaris。GaussDB 同其它宽泛应用的软件产品一样,也是采纳了 IANA 保护的通用时区数据。

该数据库由 David Olson 创建,由 Paul Eggert 进行编辑和保护。因此有些中央也将其称作 Olson 数据库。它的显著特色是由 Paul Eggert 设计的一套通用时区命名规定,每个时区依照“区域 / 地位”格局,失去一个独有的名称,例如“America/New_York”。英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名自身蕴含时应用。时区数据库目前广泛有两个叫法 Olson 时区数据库或 IANA 时区数据库。

奥尔森(Olson)的数据有所变动,局部起因是奥尔森(AD Olson)行将退休,局部起因是针对维护者的版权侵权提起了诉讼(现已撤销)。2011 年 10 月 14 日,国内互联网名称与名称调配机构(IANA)接管了时区数据库的保护工作。它会定期进行更新以反映各政治实体对时区边界、UTC 差值和夏令时规定的更改。对 tz 的更新遵循 BCP 175 流程进行治理。常常有一些国家变更时区规定,IANA 每年都会公布最新的时区数据和解析源码库。

实际上时区如何定义如何治理是颇具争议的事件,并不存在相对权威的时区数据库。IANA 保护的通用时区数据库因为每条记录都标识了明确的信息起源,有历史信息也能揣测将来工夫,被 GNU C Library,BSD 的采纳而变的宽泛应用。其实还存在其它的时区数据库,例如:微软时区数据库,HP-UX 时区数据库,世界工夫服务器(https://www.worldtimeserver.com/)和国内航空运输协会的《规范时间表信息手册》等。

实战篇

1 GaussDB(DWS)时区的应用

零碎表 pg_timezone_names 记录时区名称。

testdb=# select * from pg_timezone_names where utc_offset='08:00:00';
        name        | abbrev | utc_offset | is_dst
--------------------+--------+------------+--------
 Asia/Kuala_Lumpur  | +08    | 08:00:00   | f
 Asia/Brunei        | +08    | 08:00:00   | f
 Asia/Makassar      | WITA   | 08:00:00   | f
 Asia/Harbin        | CST    | 08:00:00   | f
 Asia/Ujung_Pandang | WITA   | 08:00:00   | f
 Asia/Chungking     | CST    | 08:00:00   | f
 Asia/Kuching       | +08    | 08:00:00   | f
 Asia/Taipei        | CST    | 08:00:00   | f
 Asia/Macau         | CST    | 08:00:00   | f
 Asia/Macao         | CST    | 08:00:00   | f
 Asia/Manila        | PST    | 08:00:00   | f
 Asia/Chongqing     | CST    | 08:00:00   | f
 Asia/Shanghai      | CST    | 08:00:00   | f
 Asia/Choibalsan    | +08    | 08:00:00   | f
 Asia/Ulaanbaatar   | +08    | 08:00:00   | f
 Asia/Irkutsk       | +08    | 08:00:00   | f
 Asia/Ulan_Bator    | +08    | 08:00:00   | f
 Asia/Hong_Kong     | HKT    | 08:00:00   | f
 Asia/Singapore     | +08    | 08:00:00   | f
 Australia/West     | AWST   | 08:00:00   | f
 Australia/Perth    | AWST   | 08:00:00   | f
 ROC                | CST    | 08:00:00   | f
 Etc/GMT-8          | +08    | 08:00:00   | f
 PRC                | CST    | 08:00:00   | f
 Singapore          | +08    | 08:00:00   | f
 Antarctica/Casey   | +08    | 08:00:00   | f
 Hongkong           | HKT    | 08:00:00   | f
(27 rows)

零碎表 pg_timezone_abbrevs 记录了时区简称

testdb=# select * from pg_timezone_abbrevs where utc_offset='08:00:00';
 abbrev | utc_offset | is_dst
--------+------------+--------
 AWST   | 08:00:00   | f
 BNT    | 08:00:00   | f
 BORT   | 08:00:00   | f
 CCT    | 08:00:00   | f
 HKT    | 08:00:00   | f
 IRKST  | 08:00:00   | f
 IRKT   | 08:00:00   | f
 MYT    | 08:00:00   | f
 PHT    | 08:00:00   | f
 SGT    | 08:00:00   | f
 ULAT   | 08:00:00   | f
 WADT   | 08:00:00   | t
(12 rows)

通过设置 session 的环境变量 timezone 能够设置数据库数据入库和查问时的时区。为什么是 session 级?不必用户设置不同的时区,或者用户遗记之前设置的时区怎么办?

答:工夫数据入库后数据库管理软件后盾都会将工夫转换为 UTC 的 0 时区工夫,用户查问时依据用户设置的时区,再转换为相应工夫给用户。因而用户设置的时区不影响数据存储,数据迁徙时也不须要关怀时区。

2 GaussDB(DWS)初始化时如何设定默认时区

如果配置文件中未指定时区,则从操作系统以后环境变量 TZ 获取以后操作系统时区,且该时区是数据库内反对的时区,则间接应用操作系统时区。否则,依据操作系统以后工夫结构一些日期来评判哪个时区更和操作系统匹配。

评判办法:

1)从今向后 100 年内采集一些工夫戳

首先,探测以后年的一月和七月,这能够疾速排除掉大量的不合乎时区。
其次,探测以后年七月向后 100 年间的每周,能够无效排除掉夏令时不合乎的时区。

tnow = time(NULL); // 获取 1970-01-01 00:00:00 UTC 至今所经验过的秒数
tm_val = localtime(&tnow); // 将从 time()获取的工夫戳,转为本地工夫的 tm 构造格局
thisyear = tm_val->tm_year + 1900; //tm_year 是自 1900 年起的年数,所以要加 1900
time_needto_test = 0;

// 先结构一个当年的 1 月 15 日,再调整到以后周的第一天 00:00:00
t = MakeTime(thisyear, 1, 15);
t -= (t % T_WEEK);
test_times[time_needto_test++] = t;

// 结构一个当年的 7 月 15 日,再调整到以后周的第一天 00:00:00
t = MakeTime(thisyear, 7, 15);
t -= (t % T_WEEK);
test_times[time_needto_test++] = t;

// 结构向后 100 年内每周的工夫
while (tt.n_test_times < 52 * 100) {
    t -= T_WEEK;
    test_times[time_needto_test++] = t;
}

// 总共结构了 5202 个探测工夫

2)判断每个数据库外部时区与操作系统时区的匹配度

如果一个工夫戳转为操作系统时区与转为待测试的数据库外部时区后的工夫统一,则加一分。遇到一个不匹配则完结以后时区匹配。

首先,判断 “/etc/localtime” 中时区与后面测试工夫的匹配度,如齐全匹配则返回胜利。

否则,判断数据库装置目录 timezone 下的每个时区文件与后面测试工夫的匹配度,获取匹配度最高的时区。

bestscore = 0;for (获取每一个时区文件) {

    判断以后时区文件与探测工夫的匹配度
    score = score_timezone(tzdirsub, tt);

    if (score > bestscore) { // 以后时区文件匹配度 > 目前最大匹配度
        bestscore = score;
        bestzonename = tzdirsub;
    } else if (score == bestscore) { // 如果以后时区文件匹配度与目前最大匹配度相等,则抉择长度更短,字母排序更靠前的时区
      if ((strlen(tzdirsub) < strlen(bestzonename) ||
          (strlen(tzdirsub) == strlen(bestzonename) && strcmp(tzdirsub, bestzonename) < 0))
          strlcpy(bestzonename, tzdirsub, TZ_STRLEN_MAX + 1);
    }
}

3)如果所有数据库外部时区匹配完,最佳得分仍为 0,则须要结构一个与操作系统时区统一的 POSIX 格调的时区,例如:“PSD8PDT”

冷常识篇

1 我国有哪些时区,都是怎么设置的?

公元 1912 年之前,中国各地并没有对立的规范工夫。在封建时代,国家的规范历法由皇庭颁布,而中国传统历法同时依赖于日月两个天体的静止,并以理论地理观测为准,因而历时规范都以朝廷所在地(精确说,是钦天监的观测点)的经纬为准。

公元 1912 年,中华民国建设,首次设立并正式颁布时区划分将中国分为五个时区,并在 1939 年正式颁布。

1:昆仑时区(GMT+5:30)
2:新藏时区(GMT+6)
3:陇蜀时区(GMT+7)
4:中原标准时区(GMT+8)
5:长白时区(GMT+8:30)

具体介绍如下:

Asia/Harbin 也叫长白时区,次要代表黑龙江(不包含漠河),吉林地区的工夫

# Zone  NAME            GMTOFF  RULES   FORMAT  [UNTIL]
# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
# Heilongjiang (except Mohe county), Jilin
Zone    Asia/Harbin     8:26:44 -       LMT     1928 # or Haerbin
                        8:30    -       CHAT    1932 Mar # Changbai Time
                        8:00    -       CST     1940
                        9:00    -       CHAT    1966 May
                        8:30    -       CHAT    1980 May
                        8:00    PRC     C%sT

Asia/Shanghai 也叫中原标准时区

# Zhongyuan Time ("Central plain Time")
# most of China
# Milne gives 8:05:56.7; round to nearest.
Zone    Asia/Shanghai   8:05:57 -       LMT     1928
                        8:00    Shang   C%sT    1949
                        8:00    PRC     C%sT

Asia/Chongqing 也叫胧蜀时区,次要代表广西,贵州,海南,宁夏,四川,陕西,云南,甘肃次要局部,内蒙古西部,青海西部,广东的德庆,恩平,开平,罗定,台山,新兴,阳春,阳江,郁南,云浮,为东七区。

# Long-shu Time (probably due to Long and Shu being two names of that area)
# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
Zone    Asia/Chongqing  7:06:20 -       LMT     1928 # or Chungking
                        7:00    -       LONT    1980 May # Long-shu Time
                        8:00    PRC     C%sT

Asia/Urumqi 也叫新藏时区,次要代表甘肃的阿克赛哈族自治县,安西县,敦煌,肃北县,连江县,湛江市等等等。

# Xin-zang Time ("Xinjiang-Tibet Time")
# The Gansu counties Aksay, Anxi, Dunhuang, Subei; west Qinghai;
# the Guangdong counties  Xuwen, Haikang, Suixi, Lianjiang,
# Zhanjiang, Wuchuan, Huazhou, Gaozhou, Maoming, Dianbai, and Xinyi;
# east Tibet, including Lhasa, Chamdo, Shigaise, Jimsar, Shawan and Hutubi;
# east Xinjiang, including Urumqi, Turpan, Karamay, Korla, Minfeng, Jinghe,
# Wusu, Qiemo, Xinyan, Wulanwusu, Jinghe, Yumin, Tacheng, Tuoli, Emin,
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
Zone    Asia/Urumqi     5:50:20 -       LMT     1928 # or Urumchi
                        6:00    -       URUT    1980 May # Urumqi Time
                        8:00    PRC     C%sT

Asia/Kashgar 也叫昆仑时区,次要代表西藏西部(普兰县,阿合奇县,疏附县,疏勒县),新疆西部(阿克苏,阿图什,伊宁,和田,策勒,洛浦,尼勒克,昭苏,特克斯,巩留,察布查尔,霍城,博乐,皮山,等等等)

Zone    Asia/Kashgar    5:03:56 -       LMT     1928 # or Kashi or Kaxgar
                        5:30    -       KAST    1940     # Kashgar Time
                        5:00    -       KAST    1980 May
                        8:00    PRC     C%sT

PRC 指向中原标准时区

Link Asia/Shanghai PRC
1949 年中华人民共和国成立,我国破除了原国民政府 1939 年设立的中原标准时区、昆仑时区、长白时区、陇蜀时区以及新藏时区,在全国对立应用(UTC+8),并命名为北京工夫。
1950 年后,全国除西藏、新疆外全副对立应用北京工夫。过后新疆的中央人民代表大会为了方便群众,设定了乌鲁木齐工夫:(UTC+6),如北京工夫 8 点,乌鲁木齐工夫则是 6 点。新的时区调整如下:

1)Asia/Harbin(长白时区),Asia/Chongqing(陇蜀时区),Asia/Shanghai(中原标准时区)时区名保留,定义都指向新定义的 Asia/Shanghai(中国标准时区)。全国对立应用。

中原标准时区改名为北京时区,offset 有调整

# Zone  NAME            STDOFF  RULES   FORMAT  [UNTIL]
# Beijing time, used throughout China; represented by Shanghai.
Zone    Asia/Shanghai   8:05:43 -       LMT     1901
                        8:00    Shang   C%sT    1949 May 28
                        8:00    PRC     C%sT

2)Asia/Kashgar(昆仑时区),Asia/Urumqi(新藏时区)时区名保留,定义都指向新定义的 Asia/Urumqi(乌鲁木齐时区)。当地同时应用两个时区定义。

新藏时区改名为新疆时区 offset 有调整

# Xinjiang time, used by many in western China; represented by Ürümqi / Ürümchi
# / Wulumuqi.  (Please use Asia/Shanghai if you prefer Beijing time.)
Zone    Asia/Urumqi     5:50:20 -       LMT     1928
                        6:00    -       +06

被合并的时区

L Asia/Urumqi Asia/Kashgar 昆仑时区合入新藏时区
L Asia/Shanghai Asia/Harbin 长白时区合入中原标准时区
L Asia/Shanghai Asia/Chongqing 胧蜀时区合入中原标准时区
L Asia/Shanghai Asia/Chungking 胧蜀时区新增别名 Chungking,也合入中原标准时区
L Asia/Shanghai PRC

2 为什么没有北京时区只有北京工夫?

因为各种政治起因国家所在地区,国家名称和地区所属国家会时常产生变更,这给时区治理带来很多麻烦。例如:位于非洲东南部的内陆国家“斯威士兰王国”在 2018 年 4 月发表将国名更改为“埃斯瓦蒂尼”;咱们相对相熟的 1997 年 7 月 1 日,香港从英属殖民地回归到了咱们伟大祖国的怀抱,所属国就进行了变更。因而,IANA 的策略是对政治变更保持中立性,时区通常不与国家绑定,也并不要求每个国家或国家首都必须具备时区名称。

为了国内用户的使用方便,GaussDB(DWS)依据 IANA 的定义的语法规定,在外部帮忙用户定义了 Asia/Beijing 时区,其定义与 PRC 时区定义统一。

3 时区定义是变化无穷的吗?

时区如何定义如何治理是颇具争议的事件,并不存在相对权威的时区数据库。一个国家或地区的时区信息变更属于独立事务,没有任务必须告诉 IANA。IANA 时区数据库的权威性次要依赖时区数据库维护者对相干国家或地区的理解水平。

因而,在 IANA 的时区定义里记录了时区数据库维护者收集时区信息的起源,有时候并不是很主观。上面是 IANA 中对于我国时区信息的参照根据。

From Guy Harris:
From Bob Devine (1988-01-28): See TIME mag, 1986-02-17 p.52.
From U. S. Naval Observatory (1989-01-19): 
From Anthony Fok (2001-12-20): from some Taiwan websites
From Paul Eggert (2006-03-22): Devine's note about Time magazine
From Jesper Norgaard Welen (2006-07-14): http://www.astro.com/atlas
From Paul Eggert (2008-02-11): I just now checked Google News for western news sources

From David Cochrane (2014-03-26): https://content.time.com/time/magazine/article/0,9171,960684,00.html
From Luther Ma (2014-04-22): Guo's report regarding Xinjiang
From Paul Eggert (2014-06-30): http://www.sinkiang.gov.cn/service/ourworking (2014-04-22).
From Paul Eggert (2017-01-05):
  Guo Qing-sheng (National Time-Service Center, CAS, Xi'an 710600, China)
  (Zhongguo ke ji shi liao, 中国科技史料). 2003;24(1):5-9.
  http://oversea.cnki.net/kcms/detail/detail.aspx?filename=ZGKS200301000&dbname=CJFD2003
  Guo Qing-sheng (Shaanxi Astronomical Observatory, CAS, Xi'an 710600, China)
  An AP article "Shanghai Internat'l Area Little Changed"
From P Chan (2018-05-07):
  1986-04-12 http://www.zj.gov.cn/attach/zfgb/198608.pdf p.21-22
  1987-02-15 http://www.gov.cn/gongbao/shuju/1987/gwyb198703.pdf p.114
  1987-09-09 http://www.gov.cn/gongbao/shuju/1987/gwyb198721.pdf p.709
  1992-03-03 http://www.gov.cn/gongbao/shuju/1992/gwyb199205.pdf p.152
  http://data.people.com.cn/pic/101p/1988/04/1988041201.jpg

可见,2014 年前 IANA 收集中国时区信息的起源还多是在东方的新闻,杂志,台湾的网站等等。2014 年之后收集的信息来自中国的西安授时核心,国家门户网址等。

此外,因为很多国家的时区信息常常变更,IANA 通用时区数据库中的时区数据会常常更新。GaussDB(DWS)作为一个面向寰球的通用数据库产品,也会在每次发表新版本时从 IANA 同步最新的时区信息,确保用户的软件产品放弃最新的时区信息。

4 为什么咱们很少须要关注时区?

自从 1992 年勾销夏令时以来,咱们的时区信息从未变更过,给咱们的生产生存带来了极大的便当。国内用户也不再须要关怀时区相干的问题。

总结

综上,GaussDB(DWS)作为一款面向寰球用户的高性能剖析型数据库产品,对时区的反对也是合乎工业界标准规范的。GaussDB(DWS)中时区的应用简略不便,默认时区的抉择也比拟科学合理。

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

点击关注,第一工夫理解华为云陈腐技术~

正文完
 0