Dự kiến sẽ có hai biến thể của date_trunc
:một cho timestamp
và một cho timestamptz
, bởi vì tài liệu
nói:
Nếu bạn muốn hiểu rõ hơn về dấu thời gian và dấu thời gian, hãy đọc trước câu trả lời tuyệt vời ở đây .
Sau đó về date_trunc
. Theo các thử nghiệm và cách giải thích của tôi về các câu trả lời SO khác nhau (như cái này
), mọi thứ hoạt động như thể, khi nhận được dấu thời gian, date_trunc
đầu tiên chuyển đổi nó thành dấu thời gian. Chuyển đổi này trả về một dấu thời gian theo giờ địa phương. Sau đó, việc cắt bớt được thực hiện:chỉ giữ lại ngày và giảm giờ / phút / giây.
Để tránh chuyển đổi này (cảm ơn pozs), hãy cung cấp dấu thời gian (không phải dấu thời gian) cho date_trunc:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
phần at time zone 'UTC'
cho biết "chuyển đổi dấu thời gian này thành dấu thời gian theo giờ UTC" (giờ không bị ảnh hưởng bởi chuyển đổi này). Sau đó date_trunc trả về 2001-07-16 00:00:00
.