【问题标题】:How to make PostgreSQL ignore the client's timezone when getting LOCALTIMESTAMP?获取 LOCALTIMESTAMP 时如何让 PostgreSQL 忽略客户端的时区?
【发布时间】:2019-04-15 13:24:48
【问题描述】:

根据文档,PostgreSQL 的函数localtimestamp 返回“当前日期和时间”,值为“无时区”。但是我发现返回值不仅取决于当前的绝对时间,还取决于客户端的时区设置:

clan_1=> SET timezone='UTC';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 12:50:23.754272
(1 row)

clan_1=> SET timezone='Europe/Prague';
SET
clan_1=> SELECT localtimestamp;
       localtimestamp       
----------------------------
 2019-04-15 14:50:33.678917
(1 row)

在我的数据库函数中,无论使用什么客户端(及其时区设置)调用,我都需要获取一致的数据(类型为 timestamp,而不是 timestamptz)他们。经过一番研究,我发现以下应该可以工作:

SELECT current_timestamp AT TIME ZONE 'UTC';

有没有更好(更简单)的方法?


PostgreSQL 10.6

【问题讨论】:

    标签: postgresql timezone


    【解决方案1】:

    你的方法很好,但更简单

    SELECT current_timestamp;
    

    它还将为所有会话返回相同的时间戳,只是它们将根据会话时区进行格式化。

    这应该不是问题,因为2019-04-01 12:00:00+022019-04-01 10:00:00+00 相同。

    【讨论】:

    • 谢谢。问题是我需要获取 timestamp(而不是 timestamptz)。 (我承认我在最初的问题中没有明确提到它。)
    • 那么你的解决方案是最好的。
    猜你喜欢
    • 2013-07-05
    • 2019-09-13
    • 2015-01-29
    • 1970-01-01
    • 2012-05-05
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多