我在 OSX 10.6.8 上使用了一个相当新的 Emacs Trunk 版本。
当英格兰比洛杉矶早 8 小时时,我无法理解为什么洛杉矶会是 UTC+8。它应该是 UTC-8。Emacs Trunk 中是否存在在设置时区时正负反转的错误?
(setenv "TZ" "UTC-8")
为加利福尼亚州洛杉矶产生错误的日期/时间——即提前 16 小时。
(setenv "TZ" "UTC+8")
产生加利福尼亚州洛杉矶的正确日期/时间。
我在 OSX 10.6.8 上使用了一个相当新的 Emacs Trunk 版本。
当英格兰比洛杉矶早 8 小时时,我无法理解为什么洛杉矶会是 UTC+8。它应该是 UTC-8。Emacs Trunk 中是否存在在设置时区时正负反转的错误?
(setenv "TZ" "UTC-8")
为加利福尼亚州洛杉矶产生错误的日期/时间——即提前 16 小时。
(setenv "TZ" "UTC+8")
产生加利福尼亚州洛杉矶的正确日期/时间。
这不是 Emacs 特有的,也不是错误。这是POSIX :)
的含义TZ
在IEEE 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 小时”,而是“时区,比 UTC晚8 小时”,或者更准确地说,是本地时间必须加上 8 小时才能得到 UTC 的时区。
洛杉矶比 UTC 时间晚 8 小时,因此您需要将洛杉矶当地时间加上 8 小时才能获得 UTC 时间,这给了您TZ=UTF+8
. TZ=UTF-8
为您提供上海当地时间,比 UTC 时间早 8 小时,因此您必须在当地时间加上 -8 小时才能获得 UTC。