0

我在 OSX 10.6.8 上使用了一个相当新的 Emacs Trunk 版本。

当英格兰比洛杉矶早 8 小时时,我无法理解为什么洛杉矶会是 UTC+8。它应该是 UTC-8。Emacs Trunk 中是否存在在设置时区时正负反转的错误?

(setenv "TZ" "UTC-8")为加利福尼亚州洛杉矶产生错误的日​​期/时间——即提前 16 小时。

(setenv "TZ" "UTC+8")产生加利福尼亚州洛杉矶的正确日期/时间。

4

1 回答 1

4

这不是 Emacs 特有的,也不是错误。这是POSIX :)

的含义TZIEEE Std 1003.1, Base Definitions, 8.3 Other Environment Variables中指定:

[…]

扩展格式(对于所有 TZ 的值没有 a 作为第一个字符)如下:

stdoffset[dst[offset][,start[/time],end[/time]]]

在哪里:

标准和标准

指示不少于三个,不超过 {TZNAME_MAX} 个字节,它们是标准 (std) 或替代 (dst - 例如夏令时) 时区的指定。只需要std;如果缺少 dst,则替代时间不适用于此语言环境。这些字段中的每一个都可能以引用或不引用的两种格式出现:

[…]

抵消

指示添加到本地时间以达到协调世界时的值。偏移量具有以下形式:

[…]

UTC+8不是“UTC 加 8 小时”,而是“时区,比 UTC8 小时”,或者更准确地说,是本地时间必须加上 8 小时才能得到 UTC 的时区。

洛杉矶比 UTC 时间晚 8 小时,因此您需要将洛杉矶当地时间加上 8 小时才能获得 UTC 时间,这给了您TZ=UTF+8. TZ=UTF-8为您提供上海当地时间,比 UTC 时间早 8 小时,因此您必须在当地时间加上 -8 小时才能获得 UTC。

于 2013-11-05T14:22:45.817 回答