Как рассчитать долю года от объектов datetime в Python? - PullRequest
0 голосов
/ 17 мая 2019

У меня есть две даты, выраженные как datetime объекты, и я пытаюсь вычислить время между двумя датами в долях лет (эквивалентно функции Excel yearfrac).

Используя relativedelta, я могуполучить количество лет, количество месяцев и количество дней между датами, но не долю лет, и я также могу вычесть даты, чтобы получить количество дней, но деление на 365.25, похоже, не дает мнея бы ожидал ответа.

start_date = dt.datetime(2010, 12, 31)
end_date = dt.datetime(2019, 5, 16);
delta = relativedelta(end_date, start_date);
print(delta)

Вот такой вывод я получаю:

относительная дельта (годы = + 8, месяцы = + 4, дни = + 16)

Я ищу следующее: 8.38

Если я использую следующий код:

delta = (end_date - start_date)/365.25
print(delta)

Я получаю вывод: 8 дней, 8:56:10.841889

1 Ответ

0 голосов
/ 17 мая 2019

Я только что сделал математику 8 + ((месяцев * 30) + дней) / 365 = 8,3726.Это предполагает 30 дней во всех месяцах и 365 дней в году.Менее точный, но может уместиться на одной линии.Что вы получаете, когда вы делите на число 365,25, что делает это неправильно?Насколько точной она должна быть?

Если вам нужна абсолютная точность, я бы просто сделал:

from datetime import date

d0 = date(2010, 12, 31)
d1 = date(2019, 5, 16)
delta = d1 - d0
delta_fraction = delta.days/365.25
print(delta_fraction)
# Output: 8.72348

EDIT Это упрощенное решение, предполагающее 365,25 дней вгод (вы можете использовать 365,2425 дня, чтобы быть точным с точностью до 400 лет) для учета високосных лет.Если вам требуется, чтобы он точно совпадал с выходом Excel, вам лучше написать макрос vba для excel

.
...