如何在PostgreSQL中返回不同时区的当前日期
我正在开发一个应用程序,它使用东部时间,数据库设置为太平洋时间。这已经引起了一些问题,但我们被告知,这不可能是任何其他方式,所以我们只需要解决它 不管怎么说,我有一件麻烦的事就是今天的约会。由于数据库位于太平洋地区,如果我在凌晨1点使用如何在PostgreSQL中返回不同时区的当前日期,postgresql,date,timezone,Postgresql,Date,Timezone,我正在开发一个应用程序,它使用东部时间,数据库设置为太平洋时间。这已经引起了一些问题,但我们被告知,这不可能是任何其他方式,所以我们只需要解决它 不管怎么说,我有一件麻烦的事就是今天的约会。由于数据库位于太平洋地区,如果我在凌晨1点使用current_date询问今天的日期,它会给出昨天的日期。我尝试过设置时区和加减间隔,但它似乎从来没有像我期望的那样工作,我宁愿不在凌晨1点做大量的测试来让它工作 在PostgreSQL中,有没有一种简单的方法可以返回给定时区中今天的日期 选择时区“UTC”的当
current_date
询问今天的日期,它会给出昨天的日期。我尝试过设置时区和加减间隔,但它似乎从来没有像我期望的那样工作,我宁愿不在凌晨1点做大量的测试来让它工作
在PostgreSQL中,有没有一种简单的方法可以返回给定时区中今天的日期
选择时区“UTC”的当前日期,当前日期::时间戳代码>
或任何其他区域
更新:
选择(时区“UTC”的当前日期)::日期,当前日期::日期
无论数据库时区如何,都将返回东部标准时间中的当前日期
(或任何其他时区,无论出于何种原因,都不会使用偏移。)
如果您想使用偏移量,这将仅适用于UTC偏移量
这个答案给了我9.6.5的错误结果。当我写这篇文章时,时间是2017-09-29T05:00Z(我在UTC+10,这是我的Postgres时区),但是select(时区“UTC”的当前日期)::date
表示2017-09-28
。相比之下,select(时区“UTC”的当前时间戳)::date
给出了当前正确的UTC日期2017-09-29
。我相信这实际上是将当前日期(在db tz中)转换为给定的tz。不是该tz中的当前日期。“在时区…”首先将当前日期转换为日期+时间戳;将时间设置为00:00。然后,它添加任何时区偏移量。例如,如果是伦敦的下午2点2分,而你为“澳大利亚/悉尼”这样做,你仍然会得到2/2(因为这将是2/2 00:00+11=2/2 11AM)。相反,您希望使用@SimonKissane建议的current_timestamp
。上述方法不适用于UTC
偏移量的原因是postgresql假定给定值为POSIX时间戳
,它与UTC
偏移量基本相同,但是有一个倒过来的符号和完全任意的字母组合。
SELECT date(timezone('EST', now()))
SELECT date(timezone('UTC±XX', now()::timestamp))