Re: Binary Format of Timestamp

From: Michael Fuhr <mike(at)fuhr(dot)org>
To: Joe Joe <fondwey(at)yahoo(dot)com>
Cc: pgsql-novice(at)postgresql(dot)org
Subject: Re: Binary Format of Timestamp
Date: 2005-06-28 06:00:20
Message-ID: 20050628060019.GA18379@winnie.fuhr.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-novice

On Tue, Jun 21, 2005 at 06:28:05AM -0700, Joe Joe wrote:
>
> I have a timestamp in a database that is beeing
> returned in pgAdmin as "2005-06-21 11:21:47", exactly
> as entered. When i retrieve the field via PQgetvalue i
> get 8 bytes worth of data that i can not interpret.
> ColumnType is TIMESTAMPOID, and the field content is
> binary, size is 8 bytes, also all as expected.
> I expect the timestamp format to be a float8 type
> containing the seconds elapsed sind the 1.1.2000. This
> should roughly be something around 172668107, give and
> take a few timezone adjustments. What i get back from
> PQgetvalue is the following array of bytes:
>
> 0: 0x00
> 1: 0x00
> 2: 0x9d
> 3: 0x0a
> 4: 0x6d
> 5: 0x2e
> 6: 0x88
> 7: 0xc0
>
> Handling these bytes like a double (i.e adjusting them
> for network byteorder), returns a value of
> 8.530937980114e-310#DEN.
> But no matter how i order these bytes, i cannot make
> sense of them.

You're assuming that the value is a double, but what's your
integer_datetimes setting? I notice that the above bytes unpacked
as a 64-bit integer give exactly the number you guessed, multiplied
by one million:

% perl -le 'print unpack("q", pack("C*", 0xc0, 0x88, 0x2e, 0x6d, 0x0a, 0x9d, 0x00, 0x00))'
172668107000000

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

In response to

Browse pgsql-novice by date

  From Date Subject
Next Message Tom Lane 2005-06-28 06:14:17 Re: Binary Format of Timestamp
Previous Message Tom Lane 2005-06-28 05:40:32 Re: DANGER Windows version might hurt you