2

Postgresql 非常擅长处理时区,使用经典的 tzdata 数据库。

服务器可以在不同时区之间转换过去和未来的时间戳,遵循 tzdata 中的规则(偏移量,dst 变化,..)

对于给定的时区和给定的日期范围,是否有一种简单有效的方法可以在发生时区修改事件时提取该范围内的所有时间戳?

结果应该或多或少包含相当于zdumplinux 命令的输出。

zdump -v /usr/share/zoneinfo/America/Los_Angeles | grep 2017

Sun Mar 12 09:59:59 2017 UTC = Sun Mar 12 01:59:59 2017 PST isdst=0 gmtoff=-28800
Sun Mar 12 10:00:00 2017 UTC = Sun Mar 12 03:00:00 2017 PDT isdst=1 gmtoff=-25200
Sun Nov  5 08:59:59 2017 UTC = Sun Nov  5 01:59:59 2017 PDT isdst=1 gmtoff=-25200
Sun Nov  5 09:00:00 2017 UTC = Sun Nov  5 01:00:00 2017 PST isdst=0 gmtoff=-28800
4

1 回答 1

1
select d::date
from (
    select
        d at time zone 'America/Los_Angeles' as la,
        lead(d at time zone 'America/Los_Angeles') over (order by d) as la_,
        d 
    from generate_series (
        '2017-01-01'::timestamp,
        '2017-12-31', '1 day'
    ) gs (d)
) s
where la::time <> la_::time;
     d      
------------
 2017-03-12
 2017-11-05
于 2017-07-29T12:21:16.977 回答