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

Vložte čas s časovým pásmem letní čas

správné způsob je nepoužívat time with time zone (všimněte si mezery mezi time a zone ) vůbec, protože je rozbitý designem. Je ve standardu SQL, takže Postgres typ podporuje - ale doporučuje ne používat to. Více v této související odpovědi:

Protože máte problémy s DST , timetz (krátké jméno) je obzvláště špatná volba. Je špatně vybaven pro řešení letního času. Není možné určit, zda 8:00:00 je v zimním nebo letním čase.

Použijte timestamp with time zone (timstamptz ) namísto. Část s datem můžete vždy zahodit. Jednoduše použijte start_time::time získat místní čas z timestamptz . Nebo použijte AT TIME ZONE transponovat do vašeho časového pásma.

Obecně platí, že automatické zohlednění letního času , použijte název časového pásma místo zkratky časového pásma. Další vysvětlení v této související otázce a odpovědi:

Ve vašem konkrétním případě byste pravděpodobně mohli použít America/Los_Angeles (příklad s timestamptz ):

INSERT INTO mytable(start_time, end_time)
VALUES
   ('1970-01-01 08:00:00 America/Los_Angeles'
  , '1970-01-01 18:00:00 America/Los_Angeles')

Našel jsem to kontrolou:

SELECT * FROM pg_timezone_names 
WHERE  utc_offset = '-07:00'
AND    is_dst;

Základy zpracování časových pásem:



  1. Ukládání datového výstupu Apache Hadoop do databáze Mysql

  2. Jak správně používat `RETURN NEXT` v PL/pgSQL?

  3. Dynamická transpozice pro neznámou hodnotu řádku do názvu sloupce na postgresu

  4. Počet SQL