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/
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 |