Postgres的时间戳差异似乎错过了1小时?

时间:2019-04-01 20:59:12

标签: sql postgresql

我正在尝试计算postgres中两个日期之间的差异,发现在某些情况下我的测试失败,而在调试时我发现了一件有趣的事情-当我从另一个日期中减去一个日期时,似乎缺少一个小时,这是脚本(表只有一个时间戳字段):

select now(), d1, now() - d1, extract(day from date_trunc('day', now() - d1))
from test;

结果如下: enter image description here

这似乎很奇怪,所以我决定与其他服务一起检查它,并得到了我期望的结果(23小时而不是22小时):

enter image description here (请参阅https://www.timeanddate.com/date/durationresult.html?d1=2&m1=3&y1=2019&d2=1&m2=4&y2=2019&h1=23&i1=55&s1=00&h2=23&i2=48&s2=30)。

有人可以解释这些结果吗?我是在做错什么还是错过了明显的事情?我在macOS上使用的是Postgres 9.6。

1 个答案:

答案 0 :(得分:5)

Many countries switch to daylight savings time between March 2nd and April 1st。因为时钟向前移动,所以在2019年3月2日到2019年4月1日之间要少一小时。

请注意,Postgres具有自己的时区,该时区可能与用户的时区不匹配,尤其是对于Web应用程序而言。要解决此问题,请将应用程序设置为用户所在的时区,并将数据库设置为UTC。在将所有日期传递到数据库之前,将所有日期转换为UTC。