datetime.toordinal()
учитывает только часть 'date' объекта datetime, а не время.Так же, как и date.toordinal()
- у него есть только часть даты.Первые 2 и последние 2 элемента в вашем списке имеют даты и даты в одну и ту же дату, но в разное время, которое .toordinal
игнорирует.Таким образом, .toordinal
даст вам одинаковое значение для тех же датированных дат.
В общем, решение будет состоять в том, чтобы вычислить дельту между вашими датами и предварительно определенной / фиксированной.Я использую datetime.datetime(1, 1, 1)
, самую раннюю дату и время, поэтому все дельты положительны:
thurser = []
# assuming t is a list of datetime objects
for d in t:
delta = d - datetime.datetime(1, 1, 1)
thurser.append(delta.days + delta.seconds/(24 * 3600))
>>> print(thurser)
[693149.25, 693149.5, 705555.3333333334, 705555.0]
И если вы предпочитаете целые числа вместо чисел с плавающей запятой, используйте секунды вместо дней:
thurser.append(int(delta.total_seconds())) # total_seconds has microseconds in the float
>>> print(thurser)
[59888095200, 59888116800, 60959980800, 60959952000]
И чтобы вернуть исходные значения во 2-м примере:
>>> [datetime.timedelta(seconds=d) + datetime.datetime(1, 1, 1) for d in thurser]
[datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0),
datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
>>> _ == t # compare with original values
True