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】:

首先,回答问题:UTCEtc/UTC 时区之间没有区别。

Etc/UTC 是 Olson-timezone-database (tz database) 中的一个时区,也称为 IANA-timezones-database,其中所有时区都符合统一的命名约定:Area/Location

由于某些时区不能归属于世界上的任何区域(即大陆或海洋),因此引入了特殊区域 Etc (Etcetera)。这主要适用于管理时区,例如UTC。 因此,为了符合命名约定,通用协调时间(时区)在 tz 数据库中被命名为Etc/UTC

对于 UTC 以外的管理时区(例如 GMT+4GMT-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 时区之间有区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

NSTimeZone:“UTC”和“GMT”有啥区别吗?

GMT 和 UTC 一样吗? [复制]

pytz.utc 和 dt.timezone.utc 有啥区别?

Docker 修改时区

从 timestamp[us, tz=Etc/UTC] 转换为 timestamp[ns] 会导致时间戳越界

在 MongoDB 中使用某些时区时出错