Re: Getting the name of the timezone, adjusted for daylight saving

From: Steve Crawford <scrawford(at)pinpointresearch(dot)com>
To: Mark Morgan Lloyd <markMLl(dot)pgsql-general(at)telemetry(dot)co(dot)uk>
Cc: pgsql-general(at)PostgreSQL(dot)org
Subject: Re: Getting the name of the timezone, adjusted for daylight saving
Date: 2011-01-26 19:11:59
Message-ID: 4D4071FF.80400@pinpointresearch.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On 01/26/2011 09:00 AM, Mark Morgan Lloyd wrote:
> Tom Lane wrote:
>> Mark Morgan Lloyd <markMLl(dot)pgsql-general(at)telemetry(dot)co(dot)uk> writes:
>>> SELECT to_char(('2011-03-01 12:00' AT TIME ZONE
>>> 'GMT0BST')::TIMESTAMP WITH TIME ZONE, 'HH24:MI TZ');
>>> to_char
>>> -----------
>>> 12:00 GMT
>>> (1 row)
>>
>> You haven't said exactly what you were hoping to accomplish, but I
>> suspect the point here is to format a time according to some other zone
>> than the prevailing TimeZone setting. You basically can't do that, at
>> least not with to_char and the timestamptz data type --- the information
>> just isn't there. Consider creating a little plpgsql function that
>> temporarily changes the timezone setting and then calls to_char.
>
> Thanks Tom. Timestamps are going into the database which are
> implicitly UTC, and I was looking for a way to convert them when
> displayed to the local timezone (the client gets this from a
> configuration file and puts it in the query) and also to present the
> timezone name.
>
> So I think that what you're saying is that the result from to_char()
> will always be UTC, possibly corrected for daylight saving (i.e. GMT
> or BST respectively). I can live with that, the app is for local use
> and we're not that far from Greenwich :-)
>
> Now if I'm reading the documentation correctly I can refer to
> pg_timezone_names and use is_dst to determine whether a particular
> timezone (e.g. GMT) has a daylight saving correction applied at the
> current date. But from there is there any cross-reference so that if
> DST is active I can change the displayed TZ name to BST?
>
I think you want to set the client timezone explicitly:
steve=# set timezone to GMT0BST;
SET
steve=# select to_char('2011-07-15'::timestamptz,'HH24:MI TZ');
to_char
-----------
00:00 BST
(1 row)

steve=# select to_char('2011-01-15'::timestamptz,'HH24:MI TZ');
to_char
-----------
00:00 GMT
(1 row)

Cheers,
Steve

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Steve Crawford 2011-01-26 19:20:37 Re: Getting the name of the timezone, adjusted for daylight saving
Previous Message Jeff Davis 2011-01-26 18:25:33 Re: temporal period type and select distinct gives equality error