Python2
>>> mDt = datetime(1900,01,01) # annee 1900, mois 01, jour 01
>>> dt = datetime.strptime('20-02-1899', "%d-%m-%Y") # jour 20, mois 02, annee 1899
>>> # feinte: passer 1900 en argument, et remplacer juste pr l'affichage
>>> # le +1 devrait normalement etre remplacé par + delta entre mDt et dt
>>> datetime(dt.year + 1, dt.month, dt.day).strftime('%B %d, %Y').replace('1900', str(dt.year))
u'February 20, 1899'
>>>
Python3: la fonction datetime accepte bien une année inferieure a 1900
>>> mDt = datetime(1900,1,1) # annee 1900, mois 1, jour 1 (01 genere une SyntaxError)
>>> dt = datetime.strptime('20-02-1899', "%d-%m-%Y") # jour 20, mois 02, annee 1899
>>> datetime(dt.year, dt.month, dt.day).strftime('%B %d, %Y') # no problem
'February 20, 1899'
>>>
Passer donc a python3 semble etre a premiere vue la solution. Autrement, jeter un oeil sur le paquet DateTime, j'ai pas fait de tres grosses manips, mais en python3 ça donne:
(datetime) >>> from DateTime import DateTime
(datetime) >>> x = DateTime('1750/3/9 1:45pm')
(datetime) >>> x.year()
1750
(datetime) >>>
Peut etre qu'en donnant plus de details, une solution plus precise te sera apportée.
[EDIT: ]
@jc fait bien de nous preciser qu'en python2, seule la fonction strftime ne sait pas gérer les dates avant 1900, il est parfaitement possible de faire:
In [7]: print(datetime.datetime(1899, 2,20))
1899-02-20 00:00:00
In [10]: print( datetime.datetime.min )
0001-01-01 00:00:00
Du coup, si un formattage est necessaire, cela se fera eventuellement a coup de isoformat(), de split() et de replace():
>>> datetime(1865, 7, 2, 9, 30, 21).isoformat()
'1865-07-02T09:30:21'
>>>
Comment gerer les dates negatives? Travailler en valeur absolue?