时区信息数据库

本页使用了标题或全文手工转换,现处于中国大陆简体模式
求闻百科,共笔求闻

时区信息数据库,又称TZ databaseZoneinfo database,是一个主要应用于电脑程序以及操作系统的,可协作编辑世界时区信息的数据库[1]。由于该数据库由David Olson创立,因而有些地方也将其称作Olson数据库[2]。数据库由Paul Eggert进行编辑和维护[3]

它的显著特色是由上面提到的Paul Eggert设计的一套通用时区命名规则,例如"America/New_York"和"Europe/Paris"[4]。数据库试图记录自1970年(Unix元年)以来时区和城市的变化[5],并且还包含一些时间的转换,例如夏令时闰秒[6]

历史

该项目可以追溯至1986年之前[7]。项目的数据库和一些涉及到的源代码已经释放到公有领域[8]。通常,数据库会每年更新若干次,并发布变更公告[9]

时区的定义

在时区信息数据库中,“时区”被定义为自1970年当地时间统一的国家及地区[10]。这种定义方法关注于一个具有相同时间的地理区域,它与其他对时区的定义方法不同的是,其他方法关注于不同时区与本初子午线之间的时差。因而数据库中定义的每个时区都会记录一系列对协调世界时的时差,同一时区内一般会包含标准时间和夏令时两种。

时区的命名

为了更容易地理解,每个时区按照“区域/位置”格式,得到一个独有的名称,例如“America/New_York”。英文地名中的空格用下划线“_”代替,连词符“-”只在英文地名本身包含时使用。

区域

“区域”指的是大洲大洋名称以及Etc。大陆和海洋名称中包括:非洲美洲亚洲欧洲大洋洲南极洲太平洋大西洋印度洋北冰洋

Etc用作一些管理时区,具体而言例如“Etc/UTC”,意为协调世界时Coordinated Universal Time)。为了与POSIX标准统一,以“Etc/GMT”标记的时区将保留时区符号,即在格林威治时间(GMT)以西的区域的时区符号为正,以东区域符号为负。

地点

“地点”指的是是在区域中的特定地点的名称,通常是城市或小岛屿的名称。

有时候,“地点”本身也是一个复合名称,例如“America/Indiana/Indianapolis”时区。目前数据库中存在的三级时区名称包括:“America/Argentina/...”、“America/Kentucky/...”、“America/Indiana/...”和“America/North_Dakota/...”。

由于“地点”的命名会选取这个区域具有代表性的名称,因而不是每个城市都有一个以它命名的时区,例如没有“America/Boston”这个时区。此外,数据库中不同位置尽管有不同的名称,它们也有可能目前拥有同一个时区,例如一些历史上曾经分处不同时区(“America/Detroit”和“America/New_York”)和一些在不同国家的位置(“Europe/Prague”和“Europe/Bratislava”)。

时区数据

对于那些有多个时间偏移(通常指的是标准情况和夏令时情况下两个变量)的时区,时区信息数据库会记录准确的偏移变换时刻。数据记录的格式也可以将转换过程中日期和时间的变化记录起来。

Zone.tab文件

zone.tab文件存在于互联网中,文件格式的相关说明可参考文件中的注释,如下所示:

原文

# This file contains a table with the following columns:
# 1.  ISO 3166 2-character country code.  See the file `iso3166.tab'.
# 2.  Latitude and longitude of the zone's principal location
#     in ISO 6709 sign-degrees-minutes-seconds format,
#     either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS,
#     first latitude (+ is north), then longitude (+ is east).
# 3.  Zone name used in value of TZ environment variable.
# 4.  Comments; present if and only if the country has multiple rows.
#
# Columns are separated by a single tab.
# The table is sorted first by country, then an order within the country that
# (1) makes some geographical sense, and
# (2) puts the most populous zones first, where that does not contradict (1).

译文

#文件中的表格包含以下几列:
#1.ISO 3166 2个字符的国家/地区代碼。詳见文件“iso3166.tab”。
#2.时区代表位置的经緯度。
#ISO 6709标準中为符号-度-分-秒格式,
#即±度度分分±度度度分分或±度度分分秒秒±度度度分分秒秒,
#前半部分为緯度(+为北半球),后半部分为经度(+为东半球)。
#3.时区名称,利用时区信息数据库中的环境变量。
#4.注解,当且仅当该国家有多行记录时存在。
#
#列之间以一个定位字元分隔。
#表格以国家进行划分,对国家内部的不同记录,以下列方式进行排序
#(1)按照地理位置进行排序
#(2)在不与(1)衝突的先前下,将人口最多的区域插入首位。

1970年之前的数据

1970年之前的数据由于城市区域的变化需要进行修正,没有必要对整个区域的时区信息进行修正,这是由于新划分的区域仅需要与1970年至今的时钟进行时差比较。

例如,在1963年10月23日至1963年12月9日,巴西只有米纳斯吉拉斯圣埃斯皮里图州里约热内卢州圣保罗(英语:Sao Paulo)有夏令时,由于自1970年以来圣保罗整个区域内时钟相同,导致一个区域无法从America/Sao_Paulo时区中划分出来,这是1970年之前的数据需要修正的原因之一[11]

文件格式

时区信息数据库(Tz database)以文本文件的形式发布,文件以可阅读的形式记录了的条目规则和时区过渡信息。为便于使用,这些文本文件被编译为与操作系统无关的二进制文件,每个时区对应一个文件。相关的代码包括,被称为zic(Zone Information Compiler,时区信息编译器),以及用来读取其他文件,并将文件中的时区信息应用于应用程序接口(例如localtime()mktime())。

维护

时区信息相关的代码和数据库由一群志愿者维护。Arthur David Olson侧重于代码的编辑,Paul Eggert则侧重于数据库。计划变更的条目会被送到项目的邮件列表中,在Usenet的comp.time.tz讨论组中。项目源文件发布在FTP服务器elsie.nci.nih.gov上,这些源文件被类似于Debian的软件发行商编译、打包后成为发行版本中的一部分。终端用户可以通过对发行版本的升级来更新数据库,当然这样更新会有一些滞后,或者直接从ftp://elsie.nci.nih.gov/pub/[永久失效链接] 获得源代码,自己编译生成二进制文件。 基于类似原则的一个未来维护计划已经由互联网号码分配局起草完成。

其他标准下的应用

CLDR[12](Common Locale Data Repository,通用区域数据库)使用UN/LOCODE对区域进行判断[1]。 这意味着字符将与国家对应,这是时区信息数据库想要避免的状况。

软件系统中的应用

时区信息数据库用来处理时区和进行时区转换,已经应用于很多的计算机系统中,包括:

Olson时区编号被Unicode CLDR(Common Locale Data Repository)和ICU(International Components for Unicode)采纳。例如,在CLDR窗口→Tzid表格给出了微软Windows操作系统中的时区ID与Olson标准名称的映射关系[19]

另见

参考文献

  1. Eggert, Paul; Olson, Arthur David. Sources for time zone and daylight saving time data. 2007-11-29 [2007-12-03]. 
  2. Olson, Arthur David. Resolved timezone issue? Other issues. New ctime manual page. tz (邮件列表). 1986-12-16. 
  3. Eggert, Paul. Re: FW: IANA time zone registration - proposal. tz (邮件列表). 2005-01. 
  4. Eggert, Paul. proposal for time zone names. tz (邮件列表). 1993-10-20. 
  5. Olson, Arthur David. Re: ist of issues. tz (邮件列表). 1987-03-18. 
  6. Devine, Bob. leap seconds; [0-60] is ok. tz (邮件列表). 1988-06-02. 
  7. Olson, Arthur David. seismo!elsie!tz ; new versions of time zone stuff. tz (邮件列表). 1986-11-24. 
  8. Eggert, Paul. questions and comments on http://tycho.usno.navy.mil/tzones.html. tz (邮件列表). 1995-11-11. 
  9. zoneinfo tzcode and tzdata archives (FTP). [2007-10-30]. 
  10. Theory (text file), contained in the "tzcode" distribution. Version tzcode2007h.tar.gz 2007-10-01 referenced.
  11. Olson, Arthur David. RE: little nuance in brazil 1963. tz (邮件列表). 2010-01-06 [2011-06-16]. 
  12. CLDR - Unicode Common Locale Data Repository. [2011-06-14]. 
  13. Olson time zone support and setup. AIX 7.1 information. IBM. [2011-03-12]. 
  14. Managing the Time Zone Variable. IBM. 2007-02-02 [2011-03-11]. 
  15. 2007 daylight savings time changes for Unix. Academic Computing and Communications Center, University of Illinois at Chicago. 2007-02-25 [2008-03-18]. )
  16. 16.0 16.1 AIX O/S updated to support 2007 Daylight Saving Time change. IBM. 2007-10-18 [2011-03-12]. 
  17. Wickremasinghe, Christopher. Introduction of daylight saving time in Western Australia 2006. AIX Wiki. IBM. 2009-03-30 [2011-03-11]. 
  18. Oracle Database Globalization Support Guide 10g Release 1 (10.1): Chapter 4, Section "Choosing a Time Zone File". Oracle Corporation. June 2004: 4–14 [2007-10-30]. Part No. B10749-02. 
  19. Windows → Tzid. Unicode Consortium. 2007-11-12 [2008-02-17]. 

外部链接