Re: Support for dates before 4713 BC

Started by Richards, Ninaover 1 year ago4 messagesgeneral
Jump to latest
#1Richards, Nina
Nina.Richards@oeaw.ac.at

Dear all,

As Alex, I'm involved with the OpenAtlas system (https://openatlas.eu), and in a recent meeting the issue about tracking dates before 4713 BC came up again. We appreciate all the work you put into developing PostgreSQL and love working with it. But as already mentioned in the discussion two years ago by Alex and Stefan Eichert (Message ID /messages/by-id/CAJuUXVeNQWm9x7d2_cvzj2rEvtQgNeGF7vog9dmaN1W5e7EDCQ@mail.gmail.com), working with dates before 4713 would facilitate our work tremendously.

Even though we know there was no calendar at that time, it would make our work much easier if we could use data before 4713 BC in the same way. Especially for statistical analyses and scientific dating methods (14C, dendrochronology), this would be a great benefit for us as well as the users of OpenAtlas.

Are there, by any chance, news about this issue? Or are you aware of any suitable workarounds on the database level in the meantime?

Thank you so much in advance for all your work. It is highly appreciated! All the best,

Nina

[1674051323205]: Nina Richards MA BSc

Nina Richards MA BSc

Technische Mitarbeiterin OpenAtlas|Technical Staff OpenAtlas

Austrian Centre for Digital Humanities and Cultural Heritage Österreichische Akademie der Wissenschaften | Austrian Academy of Sciences

Bäckerstraße 13, 1010 Wien, Österreich | Vienna, Austria

https://www.oeaw.ac.at/acdh/
<https://dhcr.clarin-dariah.eu/&gt;https://openatlas.eu

<https://www.oeaw.ac.at/acdh/&gt;

Attachments:

OutlookEmoji-1674051323205bec142cd-7cf1-45a9-a595-7bafd8d8d9a0.pngimage/png; name=OutlookEmoji-1674051323205bec142cd-7cf1-45a9-a595-7bafd8d8d9a0.pngDownload
#2David Rowley
dgrowleyml@gmail.com
In reply to: Richards, Nina (#1)

On Thu, 17 Oct 2024 at 01:26, Richards, Nina <Nina.Richards@oeaw.ac.at> wrote:

Even though we know there was no calendar at that time, it would make our work much easier if we could use data before 4713 BC in the same way. Especially for statistical analyses and scientific dating methods (14C, dendrochronology), this would be a great benefit for us as well as the users of OpenAtlas.

Are there, by any chance, news about this issue? Or are you aware of any suitable workarounds on the database level in the meantime?

It's by no means a trivial thing to do, but it is possible to
implement new types in PostgreSQL [1]https://www.postgresql.org/docs/current/sql-createtype.html. If you invented your own type,
you could significantly widen the upper and lower bounds when compared
with the standard date type.

David

[1]: https://www.postgresql.org/docs/current/sql-createtype.html

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: David Rowley (#2)

David Rowley <dgrowleyml@gmail.com> writes:

It's by no means a trivial thing to do, but it is possible to
implement new types in PostgreSQL [1]. If you invented your own type,
you could significantly widen the upper and lower bounds when compared
with the standard date type.

However, you'd then have to reimplement some large fraction of the
existing datetime support to have something useful.

We're already inventing freely to use the Gregorian calendar for
millenia before Pope Gregory lived, so I see no conceptual argument
not to extend that back even further.

IIRC the stumbling block for not going back past Julian day 0 was
uncertainty about whether the date2j and j2date algorithms behave
correctly for negative Julian dates --- which at the time was
compounded by the fact that C90 was vague about the rounding direction
for integer division with negative inputs. Now that we assume C99
with its well-defined rule for that, at least some of the uncertainty
is gone. Somebody would still have to study that code and either
prove that it's OK or correct it. And then there would be a
nontrivial amount of effort to work outwards and fix anything else
that is assuming that limitation. So it would take somebody with
considerable motivation to make it happen, but if such a somebody were
to appear with a patch, we'd likely take it. (To be clear, I doubt
any of the principal current hackers are interested in doing this.)

Now, this would still only get you to a lower-bound date somewhere
around 300000 BC. If you need to deal with geological or astronomical
time spans, then yeah you need a new type --- but presumably you would
not feel a need to tie it to Gregorian calendar dates, so the need to
reimplement a ton of related logic would not be there.

regards, tom lane

#4Asad Ali
asadalinagri@gmail.com
In reply to: Tom Lane (#3)

Hi Nina Richards,

Instead of using PostgreSQL's DATE or TIMESTAMP types, you can store years
as NUMERIC or BIGINT values.
You can manually represent dates before 4713 BC and build custom functions
for date operations like addition, subtraction, or comparison.

To facilitate comparisons or operations on your custom dates (BC/AD), you
can create user-defined functions in PostgreSQL for adding, subtracting, or
comparing dates.

Best Regards,

Asad Ali

On Thu, Oct 17, 2024 at 5:36 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

Show quoted text

David Rowley <dgrowleyml@gmail.com> writes:

It's by no means a trivial thing to do, but it is possible to
implement new types in PostgreSQL [1]. If you invented your own type,
you could significantly widen the upper and lower bounds when compared
with the standard date type.

However, you'd then have to reimplement some large fraction of the
existing datetime support to have something useful.

We're already inventing freely to use the Gregorian calendar for
millenia before Pope Gregory lived, so I see no conceptual argument
not to extend that back even further.

IIRC the stumbling block for not going back past Julian day 0 was
uncertainty about whether the date2j and j2date algorithms behave
correctly for negative Julian dates --- which at the time was
compounded by the fact that C90 was vague about the rounding direction
for integer division with negative inputs. Now that we assume C99
with its well-defined rule for that, at least some of the uncertainty
is gone. Somebody would still have to study that code and either
prove that it's OK or correct it. And then there would be a
nontrivial amount of effort to work outwards and fix anything else
that is assuming that limitation. So it would take somebody with
considerable motivation to make it happen, but if such a somebody were
to appear with a patch, we'd likely take it. (To be clear, I doubt
any of the principal current hackers are interested in doing this.)

Now, this would still only get you to a lower-bound date somewhere
around 300000 BC. If you need to deal with geological or astronomical
time spans, then yeah you need a new type --- but presumably you would
not feel a need to tie it to Gregorian calendar dates, so the need to
reimplement a ton of related logic would not be there.

regards, tom lane