Oczekuje się, że będzie miał dwa warianty date_trunc
:jeden dla timestamp
i jeden dla timestamptz
, ponieważ dokument
mówi:
Jeśli chcesz lepiej zrozumieć znacznik czasu i znacznik czasu, najpierw przeczytaj świetna odpowiedź tutaj .
Następnie o date_trunc
. Zgodnie z moimi eksperymentami i interpretacją różnych odpowiedzi SO (takich jak ta
), wszystko zachowuje się tak, jakby po otrzymaniu znacznika czasu date_trunc
najpierw konwertuje go na znacznik czasu. Ta konwersja zwraca znacznik czasu w czasie lokalnym. Następnie wykonywane jest skrócenie:zachowaj tylko datę i upuść godziny/min/sekundy.
Aby uniknąć tej konwersji (dzięki pozs), podaj znacznik czasu (nie znacznik czasu) do date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
część at time zone 'UTC'
mówi „przekonwertuj ten znacznik czasu na znacznik czasu w czasie UTC” (konwersja nie ma wpływu na godzinę). Następnie date_trunc zwraca 2001-07-16 00:00:00
.