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

PostgreSQL - как да изобразя дата в различна часова зона?

Ключът е да превключите местната часова зона към желаната часова зона за показване за продължителността на транзакцията:

begin;
set local timezone to 'EST5EDT';
select to_char('2012-05-29 15:00:00'::timestamp at time zone 'CDT',
  'YYYY-MM-DD HH24:MI:SS TZ');
end;

Резултатът е:

29.05.2012 16:00:00 EDT

Имайте предвид, че с set [local] timezone изисква се да се използват пълни имена на часови зони вместо съкращения (например CST няма да работи). Потърсете в pg_timezone_names преглед за валидни избори.

За да използвате този метод в контекст, подобен на извикване to_char(), вярвам, че тази функция върши работата:

CREATE FUNCTION display_in_other_tz(
      in_t timestamptz,
      in_tzname text,
      in_fmt text) RETURNS text
AS $$
DECLARE
 v text;
 save_tz text;
BEGIN
  SHOW timezone into save_tz;
  EXECUTE 'SET local timezone to ' || quote_literal(in_tzname);
  SELECT to_char(in_t, in_fmt) INTO v;
  EXECUTE 'SET local timezone to ' || quote_literal(save_tz);
  RETURN v;
END;
$$ language plpgsql;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на pt-pg-summary Percona Toolkit за PostgreSQL

  2. Връщане на редове, съответстващи на елементи от входния масив във функцията plpgsql

  3. Как мога да получа psycopg2 регистриране на времето за изпълнение на заявка?

  4. Как да използвам схеми в Django?

  5. Неуспешно намиране на функцията за преобразуване от неизвестно в текст