66

在 PHP 文档中,支持的时区列表列出UTC了两次:

  • UTC
  • Etc/UTC

这两者之间有什么概念上的区别,还是它们只是同义词?

4

3 回答 3

61

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

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

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

对于 UTC 以外的管理时区(例如GMT+4, GMT-8),tz 数据库在区域名称中使用POSIX 样式的符号。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”。
于 2016-01-27T07:42:45.440 回答
47

Etc/UTC是显示名称为 的时区UTC。也就是说,根据IANA 的时区数据库,它们是同一时区的长名称和短名称。

于 2013-03-20T11:14:32.020 回答
1

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是什么意思..

于 2015-11-03T13:12:43.590 回答