2017-07-25 264 views
0

我有一个postgres表,其中有一列是带时区的时间戳。存储的数据是UTC。我想将此列从UTC转换为不同的时区。我如何选择在postgres中考虑夏令时的正确时区?我看了一下pg_timezone_names视图,并知道postgres支持的实际缩写。我担心的是,像加利福尼亚州这样的某些州在一年中部分时间使用PST和PDT。postgres夏令时timezone

我怀疑,像select current_time at time zone 'PDT'select current_time at time zone 'PST'这样的代码不会给我在加州全年的正确时间。我有理解这个权利吗?

我知道我可以做一些像select current_time at time zone 'America/New_York'America/Los_Angeles。我期望这样的事情能够考虑到节省白天的时间,因为我明确指定了位置。这是处理postgres夏时制问题的唯一正确方法吗?

理想情况下,我不想明确指定位置,并希望使用postgres时区缩写。这可以做到吗?

回答

0

我和你有同样的问题。我能提供的最好的方法是指向我刚发现的他们的文档页面。 pg_timezone_names documentation

的观点pg_timezone_names提供被 通过SET TIMEZONE认可,与其相关的缩写, UTC偏移和夏令状态一起的时区名称的列表。与pg_timezone_abbrevs中显示的缩写 不同,这些名称中的许多名称暗示了一组 夏令时转换日期规则。因此,相关联的 信息会在本地DST边界之间更改。显示的 信息根据当前值 CURRENT_TIMESTAMP计算得出。

我认为这是有道理的,是最好的,我们可以希望。不幸的是,时区缩写并不包含DST规则,我认为是因为没有特定的地理区域可以隐含,因此它们只是UTC偏移的符号。