Piège
Convertir, puis tronquer
Découper une heure UTC en jours, heures ou mois donne des jours UTC : convertissez d'abord dans le fuseau du lecteur.
ts AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York' donne l'heure locale ; ensuite seulement CAST(… AS DATE),
date_trunc ou EXTRACT(HOUR …), et écrivez aussi le filtre de dates en heure locale. Les jours ne font pas tous 24
heures : celui du passage à l'heure d'hiver en dure 25, celui du passage à l'heure d'été 23. Stockez en UTC, publiez dans
le fuseau du lecteur, et dites lequel.
WITH events(occurred_at) AS (VALUES (TIMESTAMP '2026-06-02 02:30:00'), (TIMESTAMP '2026-06-02 14:00:00'))
SELECT occurred_at,
CAST(occurred_at AS DATE) AS utc_day,
CAST(occurred_at AT TIME ZONE 'UTC' AT TIME ZONE 'America/New_York' AS DATE) AS new_york_day
FROM events
ORDER BY occurred_at;
| occurred_at | utc_day | new_york_day |
|---|---|---|
| 2026-06-02 02:30:00 | 2026-06-02 | 2026-06-01 |
| 2026-06-02 14:00:00 | 2026-06-02 | 2026-06-02 |