[Python-ideas] datetime: Support infinity

Steven D'Aprano steve at pearwood.info
Mon Jan 26 12:44:40 CET 2015

On Mon, Jan 26, 2015 at 10:14:23AM +0100, Antoine Pitrou wrote:
> On Mon, 26 Jan 2015 09:24:07 +0100
> Thomas Güttler <guettliml at thomas-guettler.de> wrote:

> > PostgreSQL can store the representation of an “infinite” date, timestamp, or interval. Infinite dates are not available 
> > to Python, so these objects are mapped to date.max, datetime.max, interval.max. Unfortunately the mapping cannot be 
> > bidirectional so these dates will be stored back into the database with their values, such as 9999-12-31.

> Unless someone has a real-world use for the values of date.max,
> datetime.max, interval.max, I find it rather counter-productive to not
> store them back as infinities.

That would make them de-facto infinities that weirdly don't look like 

py> datetime.date.max
datetime.date(9999, 12, 31)

If I'm reading this page correctly, PostgreSQL supports a lot of dates 
that Python doesn't, up to 5874897AD:


so it might not matter if 9999-12-31 gets turned into infinity rather 
than treated as a normal date.

> Adding infinities to the datetime module would probably be possible but
> someone has to figure out the arithmetic rules. Do we need "not a time"
> when adding infinity to -infinity?

I shouldn't think so. The purpose of NANs in IEEE-754 maths is to allow 
the programmer to delay dealing with the failed operation until the end 
of the calculation. I don't think that date calculations tend to be 
anywhere as complicated as mathematical ones, so it would be acceptable 
to just raise an exception.

Besides, Postgresql doesn't have a "NotATime" value, so if we're trying 
to match what they do, we don't need one either.


More information about the Python-ideas mailing list