sql >> Database teknologi >  >> RDS >> PostgreSQL

Indsæt tid med tidszone sommertid

Den rigtige måde er ikke at bruge time with time zone (bemærk mellemrummet mellem time og zone ) overhovedet, da det er brudt af design. Det er i SQL-standarden, så Postgres understøtter typen - men fraråder ikke at bruge det. Mere i dette relaterede svar:

Da du har problemer med DST , timetz (kort navn) er et særligt dårligt valg. Den er dårligt rustet til at håndtere sommertid. Det er umuligt at sige, om 8:00:00 er i vinter- eller sommertid.

Brug timestamp with time zone (timstamptz ) i stedet. Du kan altid kassere datodelen. Du skal blot bruge start_time::time for at få den lokale tid fra en timestamptz . Eller brug AT TIME ZONE at transponere til din tidszone.

Generelt for at automatisk tage højde for sommertid , brug et tidszonenavn i stedet for en tidszoneforkortelse. Mere forklaring i dette relaterede spørgsmål og svar:

I dit særlige tilfælde kunne du sandsynligvis bruge America/Los_Angeles (eksempel 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')

Jeg fandt dette ved at tjekke:

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

Grundlæggende om tidszonehåndtering:



  1. Hvordan opdateres på cascade i MySQL?

  2. Kombiner to tabeller til en ny, så udvalgte rækker fra den anden ignoreres

  3. Hvordan forespørges postgres trinvise opdateringer siden et specificeret punkt (et tidsstempel eller et transaktions-id)?

  4. DBCP Connection Pool loginTimeout