Dovrebbe avere due varianti di date_trunc
:uno per timestamp
e uno per timestamptz
, perché il documento
dice:
Se vuoi comprendere meglio timestamp e timestamptz, leggi prima l'ottima risposta qui .
Quindi su date_trunc
. Secondo i miei esperimenti e l'interpretazione di varie risposte SO (come questo
), tutto si comporta come se, quando si riceve un timestamptz, date_trunc
prima lo converte in un timestamp. Questa conversione restituisce un timestamp nell'ora locale. Quindi viene eseguito il troncamento:mantieni solo la data e rilascia le ore/min/secondi.
Per evitare questa conversione (grazie pozs), fornisci un timestamp (non timestamptz) a date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
la parte at time zone 'UTC'
dice "converti questo timestamptz in un timestamp nell'ora UTC" (l'ora non è influenzata da questa conversione). Quindi date_trunc restituisce 2001-07-16 00:00:00
.