问题说的没错。
mydb=> select '2016-01-03 24:00'::timestamp;
timestamp
---------------------
2016-01-04 00:00:00
(1 row)
这是我所期望的。
mydb=> select date_trunc('seconds', '2016-01-03 23:59.9999999999'::timestamp);
date_trunc
---------------------
2016-01-03 00:24:00
(1 row)
嗯。等等,什么?
最佳答案
这与date_trunc
无关。。。一旦引入小数点,23:59.9999999999
将被解释为分钟和秒,而不是小时和分钟。
不带小数点
db=# select '2016-01-03 23:59'::timestamp;
timestamp
---------------------
2016-01-03 23:59:00
(1 row)
带小数点
db=# select '2016-01-03 23:59.9999999'::timestamp;
timestamp
---------------------
2016-01-03 00:24:00
(1 row)
这是可以理解的,考虑到你所期待的回来,但你似乎误读了24分钟作为24小时的结果在这里。
另一方面,当您超过小数点后六位(即微秒)时,取整开始:
db=# select '2016-01-03 23:59.999999'::timestamp;
timestamp
----------------------------
2016-01-03 00:23:59.999999
(1 row)
关于postgresql - 为什么postgres date_trunc返回24小时?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37712491/