时区是地球按经度划分的区域,每 15 度划分一个时区,起始于英国格林威治,创建时区的目的是帮助人们了解世界其他地方的当前时间。
如今,时区更多的是一种政治划分而非地理划分,因为有时人们需要与不太遥远地区的人们保持相同的时间。并且出于节能的原因,我们今天有了夏令时,这也是时区的一种变体。
时区通常由您所在国家的政府或一些天文机构定义,并用 3 或 4 个字母表示。有关示例,请参见第 3.2 节。
使用 timezoneconverter.com 了解全球任何地方的当前时间。
出于节能的原因,各国政府创建了夏令时。我们的时钟向前拨快了一个小时,这使我们的白天看起来更长。实际上,真正发生的是时区变化。UTC(协调世界时)原始时间仍然是,并将永远是相同的。
稍后我们将了解如何在 Linux 中自动启用和禁用 DST(夏令时)。
没有什么比示例更好的了
表 1. 巴西时区。相对于 UTC 的偏移量
名称和偏移量 | DST 名称和偏移量 | 地点 |
---|---|---|
BREST -2:00 | BREDT -1:00 | 费尔南多·迪诺罗尼亚 |
BRST -3:00 | BRDT -2:00 | 圣保罗、里约热内卢、巴西利亚、米纳斯吉拉斯州、东北地区、南部地区等 |
BRWST -4:00 | BRWDT -3:00 | 西部地区 |
BRAST -5:00 | BRADT -4:00 | 阿克里 |
请向我发送像美国时区表这样的贡献。
Linux 系统使用基于 GLIBC 动态时区,基于/etc/localtime文件。此文件是指向(或复制自)区域信息文件的链接,通常位于/usr/share/zoneinfo目录下。
从地理物理学的角度来看,世界上只有 360o/15o=24 个时区。但是为了方便人们,并适应所有的政治变化(例如夏令时),您会在/usr/share/zoneinfo中找到数百个 zoneinfo 文件,每个文件对应于世界上的每个城市、国家等。
有些国家,例如巴西,没有固定的夏令时开始日期。它每年在夏季前几个月定义,您最终可能会遇到必须更改 zoneinfo 文件的情况,该文件由文本文件(例如以下文件)通过 zic 编译。
示例 1. 巴西时区信息文本文件
# Brazil Time Zones # # Brazilian Time Zones are: # BREST: East of Brasilia. Fernando de Noronha. # BRST: Brasilia, São Paulo, Rio, Northeast, South etc # BRWST: West of Brasilia. Mato Grosso, Manaus # BRAST: Acre. # # In daylight saving time, letter 'S' changes to 'D'. # All the brazilian daylight changes can be found here: # http://pcdsh01.on.br/ # http://pcdsh01.on.br/verao1.html # # To install, make: # # # zic Brazil.txt # # Zone files will be installed in /usr/share/zoneinfo (depends on your # distribution). Then, make a symbolic link from your zone to /etc/localtime: # # # cd /etc; ln -sf /usr/share/zoneinfo/Brazil/Brasilia localtime # # # If you have updates and new standards to this file please send to # Avi Alkalay (avi @ unix.sh) # Fred Neves (fneves @ registro.br) # # Last update: 12 Oct 2005 # # # This file is available at # # http://avi.alkalay.net/software/zoneinfo/ # # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S Rule Brazil 1931 1932 - Oct 3 00:00 1:00 D Rule Brazil 1932 1933 - Mar 31 00:00 0 S Rule Brazil 1949 only - Dec 1 00:00 1:00 D Rule Brazil 1950 only - Apr 30 00:00 0 S Rule Brazil 1950 1952 - Dec 1 00:00 1:00 D Rule Brazil 1951 only - Apr 16 00:00 0 S Rule Brazil 1952 only - Mar 31 00:00 0 S Rule Brazil 1953 only - Feb 28 00:00 0 S Rule Brazil 1963 only - Oct 23 00:00 1:00 D Rule Brazil 1964 only - Mar 1 00:00 0 S Rule Brazil 1965 only - Jan 31 00:00 1:00 D Rule Brazil 1965 only - Mar 31 00:00 0 S Rule Brazil 1965 only - Dec 1 00:00 1:00 D Rule Brazil 1966 1968 - Mar 1 00:00 0 S Rule Brazil 1966 1967 - Nov 1 00:00 1:00 D Rule Brazil 1984 only - Nov 2 00:00 1:00 D Rule Brazil 1985 only - Mar 15 00:00 0 S Rule Brazil 1985 only - Nov 2 00:00 1:00 D Rule Brazil 1986 only - Mar 15 00:00 0 S Rule Brazil 1986 only - Oct 25 00:00 1:00 D Rule Brazil 1987 only - Feb 14 00:00 0 S Rule Brazil 1987 only - Oct 25 00:00 1:00 D Rule Brazil 1988 only - Feb 7 00:00 0 S Rule Brazil 1988 only - Oct 16 00:00 1:00 D Rule Brazil 1989 only - Jan 29 00:00 0 S Rule Brazil 1989 only - Oct 15 00:00 1:00 D Rule Brazil 1990 only - Feb 11 00:00 0 S Rule Brazil 1990 only - Oct 21 00:00 1:00 D Rule Brazil 1991 only - Feb 17 00:00 0 S Rule Brazil 1991 only - Oct 20 00:00 1:00 D Rule Brazil 1992 only - Feb 9 00:00 0 S Rule Brazil 1992 only - Oct 25 00:00 1:00 D Rule Brazil 1993 only - Jan 31 00:00 0 S Rule Brazil 1993 only - Oct 17 00:00 1:00 D Rule Brazil 1994 only - Feb 20 00:00 0 S Rule Brazil 1994 only - Oct 16 00:00 1:00 D Rule Brazil 1995 only - Feb 19 00:00 0 S Rule Brazil 1995 only - Oct 15 00:00 1:00 D Rule Brazil 1996 only - Feb 11 00:00 0 S Rule Brazil 1996 only - Oct 06 00:00 1:00 D Rule Brazil 1997 only - Feb 16 00:00 0 S Rule Brazil 1997 only - Oct 06 00:00 1:00 D Rule Brazil 1998 only - Mar 01 00:00 0 S Rule Brazil 1998 only - Oct 11 00:00 1:00 D Rule Brazil 1999 only - Feb 21 00:00 0 S Rule Brazil 1999 only - Oct 3 00:00 1:00 D Rule Brazil 2000 only - Feb 27 00:00 0 S Rule Brazil 2000 only - Oct 8 00:00 1:00 D Rule Brazil 2001 only - Feb 18 00:00 0 S Rule Brazil 2001 only - Oct 14 00:00 1:00 D Rule Brazil 2002 only - Feb 17 00:00 0 S Rule Brazil 2002 only - Nov 3 00:00 1:00 D Rule Brazil 2003 only - Feb 16 00:00 0 S Rule Brazil 2003 only - Oct 19 00:00 1 D Rule Brazil 2004 only - Feb 15 00:00 0 S Rule Brazil 2004 only - Nov 2 00:00 1 D Rule Brazil 2005 only - Feb 20 00:00 0 S Rule Brazil 2005 only - Oct 16 00:00 1 D Rule Brazil 2006 only - Feb 19 00:00 0 S # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL] Zone Brazil/DeNoronha -2:00 Brazil BRE%sT Zone posix/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone right/Brazil/DeNoronha -2:00 Brazil BRE%sT Zone America/Sao_Paulo -3:00 Brazil BR%sT Zone America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone America/Brasilia -3:00 Brazil BR%sT Zone posix/America/Sao_Paulo -3:00 Brazil BR%sT Zone posix/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone posix/America/Salvador -3:00 Brazil BR%sT Zone posix/America/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Central -3:00 Brazil BR%sT Zone posix/Brazil/Brasilia -3:00 Brazil BR%sT Zone posix/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone posix/Brazil/Salvador -3:00 Brazil BR%sT Zone posix/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Sao_Paulo -3:00 Brazil BR%sT Zone right/America/Rio_de_Janeiro -3:00 Brazil BR%sT Zone right/America/Salvador -3:00 Brazil BR%sT Zone right/America/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Central -3:00 Brazil BR%sT Zone right/Brazil/Brasilia -3:00 Brazil BR%sT Zone right/Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone right/Brazil/Salvador -3:00 Brazil BR%sT Zone right/Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Central -3:00 Brazil BR%sT Zone Brazil/Brasilia -3:00 Brazil BR%sT Zone Brazil/Sao_Paulo -3:00 Brazil BR%sT Zone Brazil/Rio_de_Janeiro -3:00 Brazil BR%sT Zone Brazil/Salvador -3:00 Brazil BR%sT Zone Brazil/East -3:00 Brazil BR%sT Zone posix/Brazil/East -3:00 Brazil BR%sT Zone right/Brazil/East -3:00 Brazil BR%sT Zone Brazil/West -4:00 Brazil BRW%sT Zone Brazil/Manaus -4:00 Brazil BRW%sT Zone Brazil/Rondonia -4:00 Brazil BRW%sT Zone Brazil/Roraima -4:00 Brazil BRW%sT Zone Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/Brazil/Manaus -4:00 Brazil BRW%sT Zone posix/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone right/Brazil/Manaus -4:00 Brazil BRW%sT Zone right/Brazil/Mato_Grosso -4:00 Brazil BRW%sT Zone posix/America/Manaus -4:00 Brazil BRW%sT Zone right/America/Manaus -4:00 Brazil BRW%sT Zone Brazil/Acre -5:00 Brazil BRA%sT |
Rule 块定义了我们更改时区的日期和时间,而在 Zone 块中,我们引用了将管理它的 Rule。请注意,Zone 名称实际上是/usr/share/zoneinfo目录下的文件名,在这里我们为同一个时区定义了几个不同的名称,只是为了方便人们找到他们的时区。
此文件的注释解释了如何使用 zic zoneinfo 编译器(它也已经安装了它们)安装这些时区。为了使其生效,您只需将 zoneinfo 文件链接(或复制)到/etc/localtime即可。在某些发行版中,有一种更高级别(也是首选)的方式来设置时区,详见第 4.1 节。
在使/etc/localtime指向正确的 zoneinfo 文件后,您已经处于该时区规则之下,并且 DST 更改是自动的——您不必手动更改时间。
以下命令序列显示了 Linux 时区机制的动态性。请注意,它们都是在一分钟内发出的
bash$ ls -al /etc/localtime lrwxrwxrwx 1 root root 35 May 22 2001 /etc/localtime -> /usr/share/zoneinfo/Brazil/Brasilia bash$ date Fri Mar 29 20:13:38 BRST 2002 bash# ln -sf /usr/share/zoneinfo/GMT /etc/localtime bash$ date Fri Mar 29 23:13:47 GMT 2002 bash# ln -sf /usr/share/zoneinfo/Brazil/Brasilia /etc/localtime bash$ date Fri Mar 29 20:14:03 BRST 2002 |
在 20:13,我处于我的默认巴西时区 (BRST),然后我切换到 GMT,我的系统时间变为 23:13!当您的时区进入 DST 时,您会看到类似的效果,但规则都在您的时区内(/etc/localtime链接不会像此示例一样更改)。
在此机器上运行的应用程序(例如,生成访问日志的 Web 服务器)将感受到这种变化,因此对于开发人员来说,记住完整的时间概念是当前的时间加上当前的时区非常重要,如第 2 节中所述。
最后,我切换回了正确的时区。