您可以在查询期间设置时区,从而:
TZ=America/New_York date
请注意TZ
设置和date
命令之间的空格。在类似Bourne和类似Bourne的rc
外壳程序中,TZ
仅为命令行设置变量。在其他炮弹(csh
,tcsh
,fish
),你总是可以使用env
命令:
env TZ=America/New_York date
tl; dr
在Linux系统上。时区在/usr/share/zoneinfo
目录的文件中定义。为了纪念其创建者,通常将这种结构称为“ Olson数据库”。
每个时区的规则都定义为文本文件行,然后将其编译为二进制文件。这样编译的行定义了区域名称;该区域适用的一系列数据和时间;在标准时间内偏离UTC的时间;以及用于定义如何往返夏时制的符号(如果适用)。
例如,目录“ America”在America/New_York
上面使用的文件中包含纽约的必要信息。
注意,不存在的区域(文件名)的规范将被忽略,并且会报告UTC时间。例如,这报告了错误的时间:
TZ="America/New York" date ### WRONG ###
单一UNIX规范版本3(称为SUSv3或POSIX-2001)指出,为了可移植性,标识时区描述的字符串应以冒号开头。因此,我们也可以这样写:
TZ=":America/New_York" date
TZ=":America/Los_Angeles" date
作为使用描述文件路径名的时区指定的一种替代方法,SUSv3描述了POSIX模型。以这种格式,字符串定义为:
std offset [dst[offset][,start-date[/time],end-date[/time]]]
其中std
,标准组件名称dst
是夏令时名称。每个名称包含三个或更多字符。该offset
是积极的时区本初子午线以西负的经络是东亚。将偏移量添加到本地时间以获得UTC(以前称为GMT)。的start
和end
标准的/日光转换发生时的时间字段指示。
例如,在美国东部,标准时间比UTC早5小时,我们可以指定EST5EDT
代替America/New_York
。但是,这些替代方法并不总是被认可,尤其是对于美国以外的地区,最好避免使用。
HP-UX(与SUSv3兼容的UNIX)使用文本规则,/usr/lib/tztab
并且使用POSIX名称(例如EST5EDT,CST6CDT,MST7MDT,PST8PDT)。该文件包含每个时区的所有历史规则,类似于Olson数据库。
注意:您应该可以通过检查以下目录找到所有时区:/usr/share/zoneinfo
。