Попробуйте использовать toordinal()
. Порядковый номер 1 января 1 года нашей эры равен 1.
ordinals = [d.toordinal() for d in raw]
Теперь у вас есть список чисел, который легко масштабировать:
def scale_num(raw, target_max, target_min, source_max, source_min):
scaled = (((raw - source_min)/(source_max - source_min))*(target_max - target_min))+target_min
return scaled
target_min = datetime.datetime(1988,1,1).toordinal()
target_max = datetime.datetime(2001,12,31).toordinal()
source_max = max(ordinals)
source_min = min(ordinals)
scaled = [round(scale_num(d, target_max, target_min, source_max, source_min)) for d in ordinals]
Чтобы преобразовать порядковый номер вдата, используйте date.fromordinal()
:
date = date.fromordinal(1).isoformat()