PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Въведете час с часова зона лятно часово време

Правилнотото начинът е да не използвате time with time zone (обърнете внимание на интервала между time и zone ) изобщо, тъй като е счупен по дизайн. Той е в стандарта SQL, така че Postgres поддържа типа - но препоръчва не да го използвате. Повече в този свързан отговор:

Тъй като имате проблеми с DST , timetz (кратко име) е особено лош избор. Той е зле оборудван за работа с DST. Невъзможно е да се каже дали 8:00:00 е зимно или лятно време.

Използвайте timestamp with time zone (timstamptz ) вместо. Винаги можете да отхвърлите частта с датата. Просто използвайте start_time::time за да получите локалното време от timestamptz . Или използвайте AT TIME ZONE за транспониране във вашата часова зона.

Като цяло, за автоматично отчитане на лятното часово време , използвайте име на часовата зона вместо съкращение на часовата зона. Повече обяснения в този свързан въпрос и отговор:

Във вашия конкретен случай вероятно бихте могли да използвате America/Los_Angeles (пример с 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')

Намерих това, като проверих:

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

Основи за обработката на часовата зона:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да задам парола за 'psql' неинтерактивно?

  2. Как да използвате няколко израза WITH в една заявка на PostgreSQL?

  3. PostgreSQL създава нова колона със стойности, обусловени от други колони

  4. Намиране на комбинации от конкретни стойности

  5. Как да извикам функция на база данни с помощта на SQLAlchemy във Flask?