洛杉矶的当前时间是 18:05。但是当我运行时TZ=UTC-8 date --iso=ns,我得到:
2013-12-07T10:05:37,788173835+0800
Run Code Online (Sandbox Code Playgroud)
日期实用程序告诉我时间是 10:05,甚至说它报告为 UTC+8。为什么?
cjm*_*cjm 35
原因是它TZ=UTC-8被解释为POSIX 时区。在 POSIX 时区格式中,3 个字母是时区缩写(任意),数字是时区落后UTC的小时数。因此,UTC-8表示缩写为“UTC”的时区比实际 UTC 晚 -8 小时,或 UTC + 8 小时。
(之所以这样工作,是因为 Unix 是在美国开发的,它落后于 UTC。这种格式允许将美国时区表示为 EST5、CST6 等。)
您可以通过这些示例看到正在发生的事情:
$ TZ=UTC-8 date +'%Z %z'
UTC +0800
$ TZ=UTC8 date +'%Z %z'
UTC -0800
$ TZ=FOO-8 date +'%Z %z'
FOO +0800
Run Code Online (Sandbox Code Playgroud)
ISO-0800时区格式采用相反的方法,-指示时区落后于 UTC,并+指示时区领先于 UTC。