“export TZ=`date +%Z`” 导致“date”的输出混乱

“export TZ=`date +%Z`” 导致“date”的输出混乱

我最近注意到以下(奇怪的)行为:

user@pc:~$ date
  Mi 21. Jun 12:03:10 CEST 2017
user@pc:~$ date +%Z
  CEST
user@pc:~$ export TZ=`date +%Z`
user@pc:~$ date
  Mi 21. Jun 10:03:30 CEST 2017
user@pc:~$ date +%Z
  CEST

因此,将 TZ 环境变量设置为当前系统时区后,时钟会延迟 2 小时。它看起来像 UTC(CEST-2 小时是 UTC)。如果我现在将 TZ 设置为其他值,时钟保持不变:

user@pc:~$ export TZ=UTC
user@pc:~$ date
 Mi 21. Jun 10:07:09 UTC 2017
user@pc:~$ export TZ=PDT
user@pc:~$ date
 Mi 21. Jun 10:07:19 PDT 2017

但是,当我将 TZ 设置为 CEST-2 时,它又可以正常工作了。我有一点困惑

user@pc:~$ export TZ=CEST-2
user@pc:~$ date
 Mi 21. Jun 12:28:16 CEST 2017

我正在使用 xUbuntu 16.04,但这种行为可以在 OpenSUSE 42.2 系统上重现。

在我看来,当没有 /usr/share/zoneinfo/ABC 文件时,时区“ABC+X”始终被视为“UTC+X”(谢谢德维拉供评论)。字符串“ABC”仅插入到打印出来的日期字符串中。

问题:

  1. 上述假设正确吗?
  2. 为什么date打印出不支持的时区缩写(即在 /usr/share/zoneinfo 中不可用)?

相关内容