Re: Since '2001-09-09 01:46:40'::timestamp microseconds are lost when extracting epoch

Tom Lane <tgl@sss.pgh.pa.us>

From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: David Steele <david@pgmasters.net>, Pavel Stehule <pavel.stehule@gmail.com>, Thomas Munro <thomas.munro@gmail.com>, Petr Fedorov <petr.fedorov@phystech.edu>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2021-04-27T15:56:22Z
Lists: pgsql-bugs, pgsql-hackers
I wrote:
>> Perhaps it'd be worth documenting that you can get the standard
>> astronomical definition of Julian date by transposing to time zone UTC-12
>> before converting.

BTW ... I'd first thought that the way to do this was to rotate to
time zone UTC+12.  I convinced myself on two separate days that UTC-12
was correct instead, but now I'm thinking I was right the first time.
In particular, the results I'm getting with UTC-12 don't square with
the example on Wikipedia [1], which says "the Julian Date for
00:30:00.0 UT January 1, 2013, is 2 456 293.520 833":

regression=# select extract(julian from '2013-01-01 00:30+00'::timestamptz at time zone 'utc-12');
           extract            
------------------------------
 2456294.52083333333333333333
(1 row)

But using UTC+12 does match:

regression=# select extract(julian from '2013-01-01 00:30+00'::timestamptz at time zone 'utc+12');
           extract            
------------------------------
 2456293.52083333333333333333
(1 row)

Of course Wikipedia has been known to contain errors, but now
I'm inclined to think I blew this.  Anyone want to check my work?

			regards, tom lane

[1] https://en.wikipedia.org/wiki/Julian_day



Commits

  1. Fix inconsistent equalfuncs.c behavior for FuncCall.funcformat.

  2. Doc: fix discussion of how to get real Julian Dates.

  3. Doc: document EXTRACT(JULIAN ...), improve Julian Date explanation.

  4. Change return type of EXTRACT to numeric

  5. Improve our ability to regurgitate SQL-syntax function calls.

  6. Add more tests for EXTRACT of date type

  7. Expose internal function for converting int64 to numeric

  8. Change floating-point output format for improved performance.