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 .