sql >> Databáze >  >> RDS >> PostgreSQL

Postgresql date_trunc s časovým pásmem posune pásmo o 1 hodinu

Očekává se, že bude mít dvě varianty date_trunc :jeden pro timestamp a jeden pro timestamptz , protože dokument říká:

Pokud chcete lépe porozumět časovému razítku a časovému razítku, přečtěte si nejprve skvělá odpověď zde .

Pak o date_trunc . Podle mých experimentů a interpretace různých odpovědí SO (jako tohle ), vše se chová, jako by při příjmu časového razítka date_trunc nejprve jej převede na časové razítko. Tento převod vrátí časové razítko v místním čase. Poté se provede zkrácení:ponechte pouze datum a vynechte hodiny/min/sekundy.

Chcete-li se této konverzi vyhnout (díky pozs), zadejte časové razítko (nikoli timestamptz) do date_trunc:

date_trunc('day', TIMESTAMPTZ '2001-07-16 23:38:40Z' at time zone 'UTC')

část at time zone 'UTC' říká "převeďte toto časové razítko na časové razítko v čase UTC" (hodina není tímto převodem ovlivněna). Potom date_trunc vrátí 2001-07-16 00:00:00 .




  1. PreparedStatement a setTimestamp v oracle jdbc

  2. Jak zkontrolovat, které zámky drží na stole

  3. Jak provést kanonické srovnání XML s PostgreSQL?

  4. Jak byste uložili pracovní dobu firmy v db/modelu aplikace Rails?