sql >> Database >  >> RDS >> PostgreSQL

Tijd invoegen met tijdzone zomertijd

De juiste manier is om time with time zone niet te gebruiken (let op de spatie tussen time en zone ) helemaal niet, omdat het door het ontwerp is gebroken. Het is in de SQL-standaard, dus Postgres ondersteunt het type - maar adviseert niet om het te gebruiken. Meer in dit gerelateerde antwoord:

Aangezien je problemen hebt met DST , timetz (korte naam) is een bijzonder slechte keuze. Het is slecht uitgerust om met DST om te gaan. Het is onmogelijk om te zeggen of 8:00:00 is in winter- of zomertijd.

Gebruik timestamp with time zone (timstamptz ) in plaats van. U kunt het datumgedeelte altijd weggooien. Gebruik gewoon start_time::time om de lokale . te krijgen tijd van een timestamptz . Of gebruik AT TIME ZONE om naar uw tijdzone te transponeren.

Over het algemeen, om automatisch rekening te houden met de zomertijd , gebruik een tijdzonenaam in plaats van een tijdzone-afkorting. Meer uitleg in deze gerelateerde vraag &antwoord:

In jouw specifieke geval zou je waarschijnlijk America/Los_Angeles . kunnen gebruiken (voorbeeld met 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')

Ik vond dit door te controleren:

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

Basisprincipes over het omgaan met tijdzones:



  1. SQL-query gebruikt geen beschikbare index (SQL Server 2008)

  2. Hoe maak je GROUP BY op min en max datum

  3. Hoe zou je de uren van een bedrijf opslaan in de db/model van een Rails app?

  4. Exporteer tabel naar bestand met kolomkoppen (kolomnamen) met behulp van het bcp-hulpprogramma en SQL Server 2008