Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PostgreSQL中返回不同时区的当前日期_Postgresql_Date_Timezone - Fatal编程技术网

如何在PostgreSQL中返回不同时区的当前日期

如何在PostgreSQL中返回不同时区的当前日期,postgresql,date,timezone,Postgresql,Date,Timezone,我正在开发一个应用程序,它使用东部时间,数据库设置为太平洋时间。这已经引起了一些问题,但我们被告知,这不可能是任何其他方式,所以我们只需要解决它 不管怎么说,我有一件麻烦的事就是今天的约会。由于数据库位于太平洋地区,如果我在凌晨1点使用current_date询问今天的日期,它会给出昨天的日期。我尝试过设置时区和加减间隔,但它似乎从来没有像我期望的那样工作,我宁愿不在凌晨1点做大量的测试来让它工作 在PostgreSQL中,有没有一种简单的方法可以返回给定时区中今天的日期 选择时区“UTC”的当

我正在开发一个应用程序,它使用东部时间,数据库设置为太平洋时间。这已经引起了一些问题,但我们被告知,这不可能是任何其他方式,所以我们只需要解决它

不管怎么说,我有一件麻烦的事就是今天的约会。由于数据库位于太平洋地区,如果我在凌晨1点使用
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))