为什么时区工作不如预期?



我有一个服务器,它为我提供了一些按天分组的信息,所以我尝试使用date_trunc(),但由于时区的原因,我知道数据库中的2020-06-05 21:00:00实际上是2020-06-06 00:00:00

所以如果我只使用date_trunc,我得到了2020-06-05 00:00:00,但我需要2020-06-06 00:00:00

我正在尝试这个:

select tm ,  date_trunc('day', (tm) at time zone '+3')
from scm.tbl
where (tm BETWEEN '2020-06-05 15:00:00+00:00:00' AND '2020-06-08 20:59:00+00:00:00')
order by tm

我有这个:

2020-06-05 17:59:59  | 2020-06-05 00:00:00
2020-06-05 18:00:10  | 2020-06-06 00:00:00

在18:00,日期变成了2020-06-06,但不应该。为什么呢?我在这里做错了什么?

问题是AT TIME ZONE会将timestamp without time zone转换为timestamp with time zone,并且再次根据您当前的timezone设置进行处理。

因此,您需要使用两次AT TIME ZONE,首先解释正确时区的时间戳,然后提取 UTC 时钟当时将显示的内容:

SELECT tm, date_trunc('day', tm AT TIME ZONE '+3' AT TIME ZONE 'UTC')
FROM scm.tbl
WHERE (tm BETWEEN '2020-06-05 15:00:00+00:00:00' AND '2020-06-08 20:59:00+00:00:00')
ORDER BY tm;

我在这里找到了答案 时区感知date_trunc函数

当我在答案中看到这个时:

timestamp with time zone '2001-01-1 00:00:00+0100' at time zone '-02'

这是因为 tm 是 +03:00:00,我再次添加它......

所以我能做的是:

date_trunc('day', tm at time zone '0')

我想一定有更好的方法来做到这一点,没有"0">

相关内容

  • 没有找到相关文章

最新更新