sql >> Databasteknik >  >> RDS >> PostgreSQL

Infoga tid med tidszon sommartid

Den riktiga sättet är att inte använda time with time zone (notera mellanrummet mellan time och zone ) alls, eftersom den är trasig av design. Det finns i SQL-standarden, så Postgres stöder typen - men avråder inte att använda den. Mer i detta relaterade svar:

Eftersom du har problem med DST , timetz (kort namn) är ett särskilt dåligt val. Den är dåligt rustad att hantera sommartid. Det är omöjligt att avgöra om 8:00:00 är vinter- eller sommartid.

Använd timestamp with time zone (timstamptz ) istället. Du kan alltid slänga datumdelen. Använd bara start_time::time för att få den lokala tid från en timestamptz . Eller använd AT TIME ZONE för att överföra till din tidszon.

Generellt för att ta hänsyn till sommartid automatiskt , använd ett tidszonnamn istället för en tidszonförkortning. Mer förklaring i denna relaterade fråga och svar:

I ditt specifika fall kan du förmodligen använda America/Los_Angeles (exempel med 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')

Jag hittade detta genom att kontrollera:

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

Grunder om tidszonshantering:



  1. Word wrap låter inte siffrorna lindas också

  2. Hur man anropar en lagrad procedur från Hibernate med både IN- och OUT-parametrar

  3. Oracle Client Blob 10K Begränsning med NHibernate och Mono?

  4. PostgreSQL-utlösare och grunder för lagrade funktioner