要解决不同服务器时区下,夏令时变更时使用generate_series的结果不同的问题,可以使用以下解决方法:
使用特定时区的generate_series函数:
在查询中使用特定的时区设置来生成序列。例如,使用generate_series(start_time, end_time, interval '1 hour' AT TIME ZONE 'America/New_York')
来生成在纽约时区下的一小时间隔的序列。这样可以确保生成的序列与特定时区的夏令时变更相匹配。
使用时区无关的generate_series函数:
可以使用时区无关的generate_series函数来生成序列,然后根据需要将结果转换为特定的时区。首先,使用generate_series(start_time, end_time, interval '1 hour')
来生成一小时间隔的序列,然后在查询中使用AT TIME ZONE 'America/New_York'
将结果转换为纽约时区的时间。
代码示例:
SELECT generate_series('2022-01-01 00:00:00'::timestamp, '2022-01-02 00:00:00'::timestamp, interval '1 hour' AT TIME ZONE 'America/New_York');
SELECT generate_series('2022-01-01 00:00:00'::timestamp, '2022-01-02 00:00:00'::timestamp, interval '1 hour') AT TIME ZONE 'America/New_York';
通过使用特定时区的generate_series函数或将时区无关的generate_series函数的结果转换为特定时区,可以确保在不同服务器时区下,夏令时变更时生成的序列结果一致。