Det forventes at have to varianter af date_trunc
:en for timestamp
og en for timestamptz
, fordi dokumentet
siger:
Hvis du ønsker at forstå timestamp og timestamptz bedre, så læs først det gode svar her .
Så om date_trunc
. I henhold til mine eksperimenter og fortolkning af forskellige SO-svar (som denne
), alt opfører sig som om, når man modtager en timestamptz, date_trunc
konverterer det først til et tidsstempel. Denne konvertering returnerer et tidsstempel i lokal tid. Derefter udføres trunkering:behold kun datoen og slip timer/min/sekunder.
For at undgå denne konvertering (tak pozs), angiv et tidsstempel (ikke timestamptz) til date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
delen at time zone 'UTC'
siger "konverter dette tidsstempel til et tidsstempel i UTC-tid" (timen er ikke påvirket af denne konvertering). Så returnerer date_trunc 2001-07-16 00:00:00
.