【问题标题】:Getting records relative to current date in timezone GMT+8在时区 GMT+8 中获取相对于当前日期的记录
【发布时间】:2019-05-25 00:35:50
【问题描述】:

我想创建一个报告,生成相对于马尼拉时间当前日期的昨天记录。在马尼拉时间早上 8 点之前,查询的结果都是错误的。

我尝试在当前日期减去 1 天并将其转换为亚洲/马尼拉时区。

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 1AM

我的预期结果是'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 点再次运行它,结果是正确的。

【问题讨论】:

  • @GordonLinoff 哎呀错字了。我已经编辑了我的问题

标签: sql postgresql-9.1


【解决方案1】:

这有点复杂。 current_date 在 UTC 日期定义。因此,当您调用它时,UTC 日期是“昨天”,而您将离开一天。

解决此问题的一种方法是将当前时间移到时区,然后转换为日期:

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

【讨论】:

  • 谢谢,实际上我之前尝试过,但输出错误。阅读您的答案后再次尝试,没有 ::date 的结果超过 16 小时,因此我将配置更改为使用默认时区(UTC)作为我的应用程序时区(自动将查询结果转换为亚洲马尼拉)而不是马尼拉。看起来它正在破坏我的相对日期查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2012-04-17
  • 2014-09-08
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多