我需要将时区设置为 UTC -8,我只看到设置为 PST 或 GMT-8 的选项。有没有办法让它显示为 UTC-8?
我运行的是 RHEL6。
$ 日期 UTC 2019 年 2 月 23 日星期六 01:41:41
答案1
您还没有说明在哪里设置这个时区,但是您可以在TZ
环境变量中发明您喜欢的任何区域名称:
$ TZ='<UTC-8>+8' date
Fri Feb 22 19:25:36 UTC-8 2019
这+8
是因为 POSIX 愚蠢地,要求偏移量向后(向西增加);中的部分<...>
是显示的名称,可以是任何单个单词。如果它纯粹是字母顺序的,则不需要尖括号,但-
需要8
尖括号。
$ TZ='<yesterday>24' date
Fri Feb 22 03:30:15 yesterday 2019
$ TZ='tomorrow-24' date
Sun Feb 24 03:30:26 tomorrow 2019
如果您使用 GUI 或其他区域选择工具,它可能会查找/usr/share/zoneinfo
系统中包含的区域定义。如果您希望另一个区域显示在该列表中,则需要创建一个合适的区域信息文件并将其复制到位。这zic
工具用于编译 zoneinfo 文件文本格式,这相对简单(特别是当仅修改现有区域以更改名称时)。
在某些系统上(但我认为不是 Red Hat),有一个文件/etc/timezone
将时区全局设置为名称,您可以TZ
在其中使用该变量格式。其他系统仅使用/etc/localtime
,这通常是 zoneinfo 文件之一的副本,因此您也需要在那里创建一个合适的文件。
对于每用户或会话区域,您只能使用环境变量。
如果您将区域设置为“ UTC-8
”或其他未明确定义的区域,它被视为两件事:首先是区域的名称(“UTC”:无论存在什么字母字符串),第二是 POSIX 方向的偏移量(无论存在什么数字)。这意味着TZ=UTC-8 date
将输出类似的内容
Sat Feb 23 11:50:01 UTC 2019
- 也就是说,它报告中国或西澳大利亚的时间,并认为区域称为“UTC”。当您犯错时,这种行为非常令人困惑且令人烦恼。这可能是您在问题中包含的输出的原因,但我不能告诉。
这被解析为传统的、大部分已过时的 POSIX 时区格式RST6RDT5,M10.3.0/00:00:00,M2.4.0/00:00:00
,其中包括标准时间和夏令时间的可选名称和偏移量,以及两者之间的转换日期。对于任何重要区域,这种方法都有很多缺点,并且它不会像区域文件那样跟踪定义的历史更改。
“正确”的做法是使用 America/Los_Angeles 区域(显示为 PST)或 Etc/GMT+8(如果您无法使用该名称或不希望夏令时更改)。 GMT+8 将偏移量显示为“-08”,没有文本标签。有时,所谓正确的事情还不够好,在这种情况下,上述之一应该没问题。