时区America/Los_Angeles和US/Pacific以及PST8PDT之间的区别?

Tau*_*ren 31 mysql time timezone

我需要将MySQL数据库中的一堆日期从太平洋时间(America/Los_Angeles)转换为UTC.我找到了一个很好的答案,如何做到这一点.

在我的测试和准备期间,我发现在使用以下任何时区名称时,我获得了相同的时间转换:

  • 美洲/洛杉矶
  • 美国/太平洋
  • PST8PDT

所以我的问题如下:

  • 这些都只是同一个别名吗?或者在某个时间点它们之间是否存在实际差异?
  • 如果我想在网站上向用户提供时区列表,是否最好从America名称US组或名称组中选择它们?

dec*_*eze 30

US/Pacific和PST8PDT都属于"其他"时区,伴随此警告:

请不要使用此处列出的任何时区(除了UTC),它们仅出于向后兼容的原因而存在.

它们都应该指同一时区,比较:

http://www.travelmath.com/time-zone/PST8PDT
http://www.travelmath.com/time-zone/US/Pacific
http://www.travelmath.com/time-zone/America/Los_Angeles

因此,您应该使用America/Los_Angeles,顺便说一句,它也应该是一个非常"自然"且容易为用户选择的东西.


Kel*_*vin 7

US/PacificAmerica/Los_AngelesIANA数据库中的"链接" (请参阅维基百科).在我看过的Linux系统上,前者是后者的硬链接文件; 在OS X上它可能是一个副本.如果运行校验和(例如md5或sha1),/usr/share/zoneinfo/则2中的条目应匹配.

但是,PST8PDT可能会有所不同 - 我还没弄清楚到底是怎么回事.此错误报告表明它不会跟踪夏令时更改的历史记录,即它只是追溯将当前的DST规则应用于过去; 但在这个红宝石例子中似乎并非如此.如果它追溯适用现行规则,则两者都是-0700:

> ENV['TZ']='PST8PDT'
> [Time.mktime(2006, 4, 2, 1, 59, 59), Time.mktime(2006, 4, 2, 2)]
=> [2006-04-02 01:59:59 -0800, 2006-04-02 03:00:00 -0700] 
Run Code Online (Sandbox Code Playgroud)

此消息中,有一个来自原始数据库维护者的引用.消息作者解释说遗留区域包括PST8PDT曾经过时的信息,但现在"不太正确"无论这意味着什么.

总而言之,不要使用PST8PDT,但使用US/Pacific或使用它应该是安全的America/Los_Angeles.


Mik*_*keD 7

我遇到了一个问题,与并行US/EasternAmericas/New_YorkEST5EDT。这是我发现的。

对于1966年统一时间法案》于1967年生效之后的日期,这些时区都是相同的。此外,在世界大战期间,美国还实施了标准的DST规则,因此它们都是相同的1918-1919和1942-1945。

对于1918年之前的任何日期,在1920年至1941年(包括首尾两天)以及1946年至1966年(包括首尾两天)之间,EST5EDT总是相同的ESTPST5PDT将始终与PST相同。

1967年之前,Americas/New_York将提供在纽约市观察到的时间。因此,夏令时将遵循纽约市政府或纽约州政府制定的规则。1883年11月18日12:03:58之前的任何日期都将是本地平均时间,与世界标准时间的偏移量为-4:56:02。对于Americas/Los_Angeles1883年之前的任何时间11月18日12时07分02秒将本地平均时间与偏移-7:从58:52 UTC。在1883年至1967年之间,洛杉矶遵循洛杉矶和加利福尼亚的夏令时规则。

如果您有多个系统,其中一个假设一个,另一个假设PST8PDT,则可能发生奇怪的事情Americas/Los_Angeles。最近的任何数据看起来都不错。例如,从1966年夏季开始的生日可能会移动一个小时,然后被截断,因此它似乎是在前一天。

如果您要在阿拉斯加处理旧约会,这只是为了额外的乐趣,您需要记住,阿拉斯加是从俄罗斯购买的。1867年10月18日之前的日期位于国际日期线的另一侧,并使用儒略历而不是公历。例如,朱诺(Juneau)从1867年10月6日(朱利安)+15:02:19变为1867年10月18日(格里高利安)-8:57:41。