2013-01-02 1073 views
28

在PHP文件,list of supported time zonesUTC列出了两次:UTC和Etc/UTC时区有区别吗?

  • UTC
  • Etc/UTC

是否有这两个之间的任何概念上的差异,或者他们只是同义词?

+1

来自页面:“请不要使用此处列出的任何时区(UTC以外),它们仅出于向后兼容的原因。” - 我想知道是否覆盖了'Etc/UTC'? – 2013-01-02 20:28:00

+0

可能:继[chrisbulmer的回答](http://stackoverflow.com/a/14128617/759866),我会怀疑它是非标准的! – Benjamin

回答

21

Etc/UTC是为显示名称为UTC的时区指定的。也就是说,他们是同一时区的长名和短名,每IANA's time zone database

+0

这并不是我理解本文的方式:“例如,TZ ='Etc/GMT + 4'使用 缩写”GMT + 4“,对应于UTC (即格林威治西部)4小时,即使很多人会预计它会在UTC时间前4小时(即格林威治东部)为 。“所以它会采用相反的方式,除非UTC也这样做,否则它们确实是相反的! – Benjamin

+0

@Benjamin:我们正在谈论UTC时区的偏移量为零。正零和负零是相同的数字,无论如何都没有偏移。 –

+0

我明白,但我的问题同样适用于'Etc/GMT + 1'等。我很惊讶,只有'Etc'版本被提出,我认为一般的共识是使用GMT + 1,而不是“反向”版本! – Benjamin

0

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 ..

17

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

Etc/UTC处于奥尔森-时区数据库(tz database),也被称为IANA-timezones-database,其中所有时区符合统一命名约定一个时区:Area/Location

由于某些时区不能归属于世界的任何区域(即大陆或海洋),因此引入了特殊区域EtcEtcetera)。这主要适用于行政时区,如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”。
+0

“Etc”是“Etcetera”的缩写,在这种情况下,它是针对时区的分组,它不适合其他任何组合,即“其余”。 –

+0

@chinoto:你想告诉我什么?这正是我在我的回答中解释的(除其他外)。您在评论之前是否阅读过我的回答? –

+1

我不知道为什么我会发表评论......我记得,但是在这个页面上没有任何地方有人不确定“Etc”是什么意思,很奇怪。 –