关于时区从夏令时更改为非夏令时的棘手问题,我感到困惑。
我正在尝试生成一系列时间戳,相隔6小时。稍后将其与数据集中具有每天00、06、12、18小时的相应时间戳的数据合并。
使用以下命令可以正常工作:
generate_series(extract(epoch from start_ts)::integer, extract(epoch from end_ts)::integer, 21600)
其中start_ts是第一个日期的00小时,而end_ts是最后一个日期的00小时(不包括)。
但是,当时区偏移量在系列的一半时从+11变为+10时,它将不再与任何记录匹配,因为系列元素变为1小时。
有没有人有关于如何在尊重时区偏移的情况下如何生成与“ 00,06,12,18 hr timestamps”匹配的“ epoch integers”或时间戳的建议?
这将从今天开始生成它(使用 PostgreSQL 9.5+),持续 10 天:
select (current_date::timestamp + ((a-1)||' days')::interval)::timestamptz
from generate_series(1, 10, .25) a
Run Code Online (Sandbox Code Playgroud)
测试一整年:
select *, date_part('hour', d::timestamp), d::timestamp
from (
select (current_date::timestamp + ((a-1)||' days')::interval)::timestamptz AS d
from generate_series(1, 365, .25) a
) x
where date_part('hour', d) not in (0, 6, 12, 18)
Run Code Online (Sandbox Code Playgroud)
编辑:以下版本适用于 9.5 之前的 PostgreSQL 版本:
select (current_date::timestamp + (((a-1)/4.0)||' days')::interval)::timestamptz
from generate_series(1, 4* 10 ) a -- 10 days
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1299 次 |
| 最近记录: |