Search Postgresql Archives

Re: to_timestamp() and timestamp without time zone

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2011-06-23 at 13:26 -0700, Adrian Klaver wrote:
On 06/23/2011 01:07 PM, Steve Crawford wrote:
> On 06/23/2011 12:30 PM, hernan gonzalez wrote:
>>
>>
>> On Thu, Jun 23, 2011 at 4:15 PM, Adrian Klaver
>> <adrian.klaver@xxxxxxxxx <mailto:adrian.klaver@xxxxxxxxx>> wrote:
>>
>>     On 06/23/2011 11:40 AM, hernan gonzalez wrote:
>>
>>         Rather than being not viable, I'd argue that is is not correct.
>>         Rather, a simple direct cast will suffice:
>>         '2011-12-30 00:30:00'::timestamp without time zone
>>
>>
>>         That works only for that particular format. The point is that, for
>>         example, if I have some local date time
>>         stored as a string in other format ('30/12/2011 00:30:00') I
>>         cannot
>>         reliably parse it as a TIMESTAMP. Which I should.
>>
>>
>>     Works here. I am in US PDT:
>>
>>     select to_timestamp('30/12/2011 00:30:00', 'DD/MM/YYYY HH24:MI:SS
>>     ')::timestamp with time zone;
>>
>>     to_timestamp
>>     ------------------------
>>     2011-12-30 00:30:00-08
>>
>>
>> My point is to parse a TIMESTAMP WITHOUT TIME ZONE - and that that
>> should NOT depend on the server/session TIMEZONE.
>>
>> Try this:
>>
>> # set TIMEZONE='XXX8';
>> # select to_timestamp('2007-12-30 00:30:00','YYYY-MM-DD
>> HH24:MI:SS')::timestamp;
>> 2007-12-30 00:30:00
>> # set TIMEZONE='America/Argentina/Buenos_Aires';
>> select to_timestamp('2007-12-30 00:30:00','YYYY-MM-DD
>> HH24:MI:SS')::timestamp;
>> 2007-12-30 01:30:00
> ...snip...
>
> Every example here starts, at its core, with to_timestamp. That function
> returns a timestamp *with* time zone so of-course the current timezone
> setting will influence it. Stop using it - it doesn't do what you want.
>
> If you cast directly to a timestamp *without* time zone you can take
> advantage of the many formats PostgreSQL supports.
>
> See:
> http://www.postgresql.org/docs/9.0/interactive/datatype-datetime.html#DATATYPE-DATETIME-DATE-TABLE
> for supported formats. Note also that you can use "set datestyle" to
> match your MDY or DMY date formatting.
>
> If the format you require is so obscure that PostgreSQL can't handle it
> out-of-the-box (and the one you have presented is completely vanilla),
> use the many string-handling functions to alter your input as necessary.

Possibly:
test=> select (to_date('30/12/2007','DD/MM/YYYY') + 
'00:30'::time)::timestamp;
       timestamp
---------------------
  2007-12-30 00:30:00
(1 row)


>
> Cheers,
> Steve
>


-- 
Adrian Klaver
adrian.klaver@xxxxxxxxx


test=# SET datestyle to DMY;
SET
test=# select '30/12/2011 00:30:00'::timestamp;
      timestamp     
---------------------
2011-12-30 00:30:00
(1 row)

test=#


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux