问题究竟是什么。
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)
庵。等等,什么?
答案 0 :(得分:4)
它与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)