获取相对于时区 GMT+8 中当前日期的记录
Getting records relative to current date in timezone GMT+8
我想创建一个报告,生成相对于马尼拉时间当前日期的昨天记录。直到马尼拉时间早上 8 点,查询结果都是错误的。
我尝试在当前日期中减去 1 天并将其转换为 Asia/Manila 时区。
SELECT *
FROM table
WHERE date_field >= current_date at time zone 'Asia/Manila' - interval '1 day'
AND date_field < current_date at time zone 'Asia/Manila'
如果马尼拉今天的当前日期时间是 2019-05-25 凌晨 1 点
我的预期结果是 '2019-05-24 00:00:00' - '2019-05-24 23:59:59'
的记录
但我得到的是'2019-05-23 00:00:00' - '2019-05-23 23:59:59'
的记录
在同一天上午 8 点再次尝试 运行,结果正确。
这有点复杂。 current_date
是在 UTC 日期定义的。因此,当您调用它时,UTC 日期为 "yesterday",您将关闭一天。
解决此问题的一种方法是将当前时间移入时区,然后转换为日期:
WHERE date_field >= (current_timestamp at time zone 'Asia/Manila' - interval '1 day')::date AND
date_field < (current_timestamp at time zone 'Asia/Manila')::date
我想创建一个报告,生成相对于马尼拉时间当前日期的昨天记录。直到马尼拉时间早上 8 点,查询结果都是错误的。
我尝试在当前日期中减去 1 天并将其转换为 Asia/Manila 时区。
SELECT *
FROM table
WHERE date_field >= current_date at time zone 'Asia/Manila' - interval '1 day'
AND date_field < current_date at time zone 'Asia/Manila'
如果马尼拉今天的当前日期时间是 2019-05-25 凌晨 1 点
我的预期结果是 '2019-05-24 00:00:00' - '2019-05-24 23:59:59'
的记录但我得到的是'2019-05-23 00:00:00' - '2019-05-23 23:59:59'
的记录在同一天上午 8 点再次尝试 运行,结果正确。
这有点复杂。 current_date
是在 UTC 日期定义的。因此,当您调用它时,UTC 日期为 "yesterday",您将关闭一天。
解决此问题的一种方法是将当前时间移入时区,然后转换为日期:
WHERE date_field >= (current_timestamp at time zone 'Asia/Manila' - interval '1 day')::date AND
date_field < (current_timestamp at time zone 'Asia/Manila')::date