date_trunc
には2つのバリエーションがあると予想されます :timestamp
用に1つ 1つはtimestamptz
用です 、ドキュメント
言う:
タイムスタンプとtimestamptzをよりよく理解したい場合は、最初にここでのすばらしい答え 。
次に、date_trunc
について 。私の実験とさまざまなSO回答の解釈によると(これ
)、timestamptzを受信すると、すべてがdate_trunc
のように動作します。 最初にそれをタイムスタンプに変換します。この変換は、現地時間のタイムスタンプを返します。次に、切り捨てが実行されます。日付のみを保持し、時間/分/秒を削除します。
この変換を回避するには(pozsに感謝)、date_truncにタイムスタンプ(timestamptzではなく)を指定します:
date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')
タイムゾーン「UTC」でのパーツat time zone 'UTC'
「このタイムスタンプをUTC時間のタイムスタンプに変換する」と表示されます(時間はこの変換の影響を受けません)。次に、date_truncは2001-07-16 00:00:00
を返します。 。