Очаква се да има два варианта на date_trunc
:един за timestamp
и един за timestamptz
, защото документът
казва:
Ако искате да разберете по-добре timestamp и timestamptz, първо прочетете чудесният отговор тук .
След това относно date_trunc
. Според моите експерименти и интерпретация на различни SO отговори (като този
), всичко се държи така, сякаш при получаване на timemptz, date_trunc
първо го преобразува в клеймо за време. Това преобразуване връща клеймо за време в местно време. След това се извършва отрязване:запазва се само датата и се премахват часовете/мин/секунди.
За да избегнете това преобразуване (благодаря pozs), предоставете клеймо за време (не timestamptz) на date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
частта at time zone 'UTC'
казва „преобразувайте този timemptz в timestamp в UTC време“ (часът не се влияе от това преобразуване). Тогава date_trunc връща 2001-07-16 00:00:00
.