UTC 和 Etc/UTC 时区之间有区别吗?
Posted
技术标签:
【中文标题】UTC 和 Etc/UTC 时区之间有区别吗?【英文标题】:Is there a difference between the UTC and Etc/UTC time zones? 【发布时间】:2012-12-17 04:55:35 【问题描述】:在 php 文档中,list of supported time zones、UTC
被列出了两次:
UTC
Etc/UTC
这两者之间有什么概念上的区别,还是它们只是同义词?
【问题讨论】:
来自页面:“请不要使用此处列出的任何时区(UTC 除外),它们仅出于向后兼容的原因而存在。” - 我想知道这是否也包括Etc/UTC
?
可能:关注chrisbulmer's answer,我怀疑它是非标准的!
【参考方案1】:
首先,回答问题:UTC
和 Etc/UTC
时区之间没有区别。
Etc/UTC
是 Olson-timezone-database (tz database) 中的一个时区,也称为 IANA-timezones-database,其中所有时区都符合统一的命名约定:Area/Location
。
由于某些时区不能归属于世界上的任何区域(即大陆或海洋),因此引入了特殊区域 Etc
(Etcetera)。这主要适用于管理时区,例如UTC
。
因此,为了符合命名约定,通用协调时间(时区)在 tz 数据库中被命名为Etc/UTC
。
对于 UTC 以外的管理时区(例如 GMT+4
、GMT-8
),tz 数据库在区域名称中使用 POSIX-style signs。 POSIX 对格林威治后面(格林威治以西)的区域有正面迹象,对格林威治之前(格林威治东部)的区域有负面迹象。
时区中的 POSIX 样式标志与时区定义相反,时区在当今广泛使用且主要使用 ISO 8601。在 ISO 8601 时区格式中,负号表示区域在 UTC(格林威治以西)之后,正号表示区域在 UTC(格林威治以东)之前。这已成为当今的标准用法。
POSIX 中相反定义的可能原因是:
POSIX 是 UNIX 的一部分,它是在美国开发的,它落后于 UTC(格林威治西部)。 POSIX 格式允许将美国时区表示为 EST5、PST8,即省略 (+) 号。 通常,计算机程序和操作系统在内部以 UTC 时间执行所有操作。使用 POSIX 样式的标志,您可以添加时间和时区以获得 UTC 时间。示例:“03:30 PST8”或“03:30 GMT+8”表示它是“11:30 UTC”。【讨论】:
“Etc”是“Etcetera”的缩写,在这种情况下,它是对不适合任何其他组的时区的分组,即“其余”。 @chinoto:你想告诉我什么?这正是我在回答中所解释的(除其他外)。您在发表评论之前阅读了我的回答吗? 我不知道我为什么要发表这样的评论...我记得是这样评论的,但是在这个页面上没有人不确定“Etc”是什么意思,很奇怪。 @chinoto:出于某种原因,我刚刚再次遇到这种威胁,并意识到另一个答案(见下文)以“但我不知道 ETC 是什么意思......”结束 - 我假设这就是您所指的。 如果您需要来源,Wikipedia page 涵盖此信息。【参考方案2】:Etc/UTC
是显示名称为UTC
的时区。也就是说,根据IANA's time zone database,它们是同一时区的长名称和短名称。
【讨论】:
我不是这样理解这个文档的:“例如,TZ='Etc/GMT+4' 使用缩写“GMT+4”,对应于UTC 后4 小时(即格林威治以西)尽管许多人预计它意味着比 UTC 早 4 小时(即格林威治以东)。”所以它反过来了,除非 UTC 也这样做,否则它们真的是对立的! @Benjamin:我们谈论的是偏移量为零的 UTC 时区。正零和负零是同一个数字,反正没有偏移量。 我明白这一点,但我的问题同样适用于Etc/GMT+1
等。我很惊讶只提出了 Etc
版本,我认为普遍的共识是使用 GMT+1 ,而不是“反向”版本!【参考方案3】:
ETC/GMT+4 与 GMT-4 相同。
public static void main(String[] args)
TimeZone tz = TimeZone.getTimeZone("Etc/GMT-7");
System.out.println(tz);
tz = TimeZone.getTimeZone("GMT+7");
System.out.println(tz);
你可以自己测试一下。
但是我不知道ETC是什么意思..
【讨论】:
Etc (ETC) 意思是 etcetera link以上是关于UTC 和 Etc/UTC 时区之间有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章
pytz.utc 和 dt.timezone.utc 有啥区别?