Il est prévu d'avoir deux variantes de date_trunc
:un pour timestamp
et un pour timestamptz
, car la doc
dit :
Si vous souhaitez mieux comprendre l'horodatage et l'horodatage, lisez d'abord la bonne réponse ici .
Puis à propos de date_trunc
. Selon mes expériences et mon interprétation de diverses réponses SO (comme celui-ci
), tout se comporte comme si, lors de la réception d'un timestamptz, date_trunc
le convertit d'abord en un horodatage. Cette conversion renvoie un horodatage en heure locale. Puis la troncature est effectuée :ne gardez que la date et supprimez les heures/min/secondes.
Pour éviter cette conversion (merci pozs), fournissez un horodatage (pas timestamptz) à date_trunc :
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
la partie at time zone 'UTC'
dit "convertir cet horodatage en un horodatage en heure UTC" (l'heure n'est pas affectée par cette conversion). Alors date_trunc renvoie 2001-07-16 00:00:00
.