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

Jak převést místní čas na UTC?

Toto je popsáno v příručce , ale ne vždy je zřejmé, jak vlastně s daty/časy pracovat. Specifikace SQL je trochu bizarní.

V případě vašeho dotazu není jasné, zda chcete ukládat čas v UTC, ale zobrazovat jej v místním čase serveru (TimeZone ), nebo zda chcete ignorovat TimeZone a vždy jej zobrazovat jako UTC. Předpokládám to druhé.

Pro časová razítka stačí použít AT TIME ZONE dvakrát, jako:

SELECT TIMESTAMP '2013-08-13 00:00:00' AT TIME ZONE 'Australia/Sydney' AT TIME ZONE 'UTC';

Musíte použít AT TIME ZONE dvakrát. Jednou pro převod vstupního timestamp na timestamptz podle argumentu timezone, pak další pro převedení na timestamp v UTC.

Bohužel kvůli (IMO šílenému) způsobu, jakým specifikace SQL definuje AT TIME ZONE po dobu TIME , nemůžete udělat totéž pro TIME . Budete muset manipulovat s TimeZone proměnná místo toho:

SET TimeZone = 'UTC';
SELECT TIME '07:00' AT TIME ZONE 'Australia/Sydney';

Stále vám zůstane timetz ne time . Jeho zobrazená hodnota se tedy mění s timezone nastavení.




  1. Docker čeká na spuštění postgresql

  2. Tvůrce dotazů Laravel 4 – s komplikovanými levými spoji

  3. Pojmenování schématu spánku se mezi OS liší

  4. Nemáte implicitní aplikaci v rozsahu:PlayFramework s Oracle