时区感知date_trunc函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时区感知date_trunc函数相关的知识,希望对你有一定的参考价值。

以下查询

SELECT the_date FROM date_trunc('day', timestamp with time zone 
       '2001-01-1 00:00:00+0100') as the_date

结果

the_date
2000-12-31 00:00

有没有办法告诉date_trunc根据它所用的时区进行日/月/年转换?

预期的产出将是:2001-01-1 00:00+0100

答案

您需要指定要在其中显示的时区

select
    date_trunc(
        'day',
        timestamp with time zone '2001-01-1 00:00:00+0100' at time zone '-02'
    ) as the_date;
      the_date       
---------------------
 2001-01-01 00:00:00

AT TIME ZONE

另一答案

虽然明确的答案可能对于OP的奇怪情况是正确的,但对其他人来说更可能是不正确的。您需要将date_trunc返回的时间戳转换为适当的时区。

select
    date_trunc(
        'day',
        some_timestamp at time zone users_timezone
    ) at time zone users_timezone as the_date;

重要的是要了解date_trunc返回一个timestamp没有附加时区。您需要将时间戳转换为适当的时区,因为数据库客户端或下游的任何时区可能具有不同的时区。

以上是关于时区感知date_trunc函数的主要内容,如果未能解决你的问题,请参考以下文章

python中的时区感知与时区天真

如何在python中获取时区感知午夜日期时间? [复制]

在 Python 中获取随机时区感知日期时间

从时区偏移本地化日期时间(时区感知)

如何设置 vscode 的代码片段,以便在自动完成后自动触发 vscode 的智能感知?

Python:如何在不知道 DST 是不是生效的情况下将时区感知时间戳转换为 UTC