sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL - hoe de datum in een andere tijdzone te renderen?

De sleutel is om de lokale tijdzone te schakelen naar de gewenste tijdzone voor de weergave, voor de duur van de transactie:

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;

Het resultaat is:

2012-05-29 16:00:00 EDT

Merk op dat met set [local] timezone het is verplicht om volledige tijdzonenamen te gebruiken in plaats van afkortingen (CST zou bijvoorbeeld niet werken). Zoek op in de pg_timezone_names bekijken voor geldige keuzes.

Om die methode te gebruiken in een context die vergelijkbaar is met een to_char()-aanroep, geloof ik dat deze functie het werk doet:

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. Aqua Data Studio

  2. Records van vandaag ophalen in MySQL

  3. Hoe een array te maken in PostgreSQL

  4. De sortering vinden in SQL Server (T-SQL)