我对如何处理时区转换感到有点困惑。
我们正在建立一个已安排节目的网站,并希望根据所选时区向用户显示正确的节目时间。
我们使用的时区值来自
select * from tz_zone order by zone_name asc;
示例值如下所示:
Africa/Abidjan
...
America/Antigua
America/Araguaina
America/Argentina/Buenos_Aires
America/Indiana/Indianapolis
America/Los_Angeles
...
Antarctica/Casey
...
Asia/Aden
...
Atlantic/Azores
...
Europe/Andorra
...
正如您所看到的,这些值对于人们来说并不容易理解。
传统上,我们看到简化的列表如太平洋的-8:00 UTC,我认为人们普遍理解这一点,但我对它的运作方式感到有些困惑。
当我们查看DST之类的东西时,我们知道不是每个地方都会观察它(例如,亚利桑那州等)
要进行时区转换,我们会以UTC格式存储数据并运行以下内容:
select convert_tz(show_time, 'UTC', 'America/Los_Angeles') as show_time from shows
对于像加利福尼亚那样观察夏令时的州,一年中的部分时间他们将是-8,然后是一年中的部分时间-7。如果我们将值存储为-8,这是否意味着半年,他们的节目时间是错误的?
答案 0 :(得分:2)
如果您只存储-8
,那么夏令时之后的部分时间将会出错。
每个时区的夏令时转换点的具体日期和时间通常不同。如果您想要美国太平洋时区的实际行为,则必须使用"America/Los_Angeles"
。
另请参阅the timezone tag wiki中的“时区!=偏移”。