BC date support

Python dates have properties that PostgreSQL apparently doesn’t support – you can subtract them to get a timedelta, and you can add a timedelta to a date (or subtract a timedelta from a date) to get another date. This doesn’t really work for dates outside the current Gregorian calendar, and MINYEAR=1 is a vast oversimplification. There’s a comment at the top of datetime.py referencing the “proleptic Gregorian” that’s key here.

There are other problems with trying to extend the date range, e.g. there’s no “year zero”, and AFAIK the months historically didn’t always have the number of days they have in the Gregorian calendar (and what about leap years?). I believe I learned in high school that the Romans celebrated new year’s day on a different date (wasn’t March the first month of the year?), so the years don’t even overlap.

All this (and other reasons like implementation constraints) mean that for representing non-Gregorian dates you’re better off inventing your own system (e.g. a string or a tuple of three integers) than trying to shoehorn these into the datetime type.

The original author of datetime, @tim.one, will certainly correct me with even more facts and reasons why this wouldn’t be a good idea.