PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgresql date_trunc mit Zeitzone verschiebt die Zone um 1 Stunde

Es wird erwartet, dass es zwei Varianten von date_trunc gibt :eine für timestamp und eine für timestamptz , weil das Dokument sagt:

Wenn Sie timestamp und timestamptz besser verstehen möchten, lesen Sie zuerst die tolle Antwort hier .

Dann über date_trunc . Nach meinen Experimenten und der Interpretation verschiedener SO-Antworten (wie diese ), verhält sich alles so, als ob beim Empfang eines timestamptz date_trunc wandelt es zuerst in einen Zeitstempel um. Diese Konvertierung gibt einen Zeitstempel in Ortszeit zurück. Dann wird eine Kürzung durchgeführt:Behalten Sie nur das Datum bei und lassen Sie die Stunden/Minuten/Sekunden weg.

Um diese Konvertierung zu vermeiden (danke pozs), stellen Sie date_trunc:

einen Zeitstempel (nicht timestamptz) zur Verfügung
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')

der Teil at time zone 'UTC' sagt "konvertiere diesen Zeitstempel in einen Zeitstempel in UTC-Zeit" (die Stunde ist von dieser Konvertierung nicht betroffen). Dann gibt date_trunc 2001-07-16 00:00:00 zurück .