Как посчитать разницу двух дат на питоне?

Конечно легко это сделать, импортируя календарь используя тайм сплит и др. А как это сделать без всяких импортировок и вводов? То есть:

Формат входных данных

Даны два дня в формате: день, месяц и год. Года в обеих датах не превышают 105 и гарантируется, что первый день строго раньше второго дня.

Формат результата

Выведите количество прошедших лет.

Например: ввод
1 9 2011
10 9 2012

вывод
1

и др?


Ответы (2 шт):

Автор решения: D.Vinogradov

Отличный вариант вам предложил Алексей Р, если не брать в расчет никакие библиотеки. И оно вам максимально подходит, т.к. количество лет у вас всего до 105, а в те времена и вплоть до 17 века использовался юлианский календарь.

Ваш Ввод дат:

x = input()
y = input()

Сделаем разбивку и инты из каждого, а также назначим день, месяц и год для каждого:

first = [int(i) for i in x.split()]
second = [int(i) for i in y.split()]
day_1, month_1, year_1 = first[0], first[1], first[2]
day_2, month_2, year_2 = second[0], second[1], second[2]

функция для вычисления количества дней, как из ссылки комментария:

def jul(day, month, year):
    a = (14 - month)//12
    y = year + 4800 - a
    m = month + 12 * a - 3
    if year % 4 == 0:
        day += 1
    jdn = day + (153 * m + 2)//5 + 365 * y + y//4 - y//100 + y//400 - 32045
    return jdn

Вычисляем количество дней, а потом и лет. (берем инт, чтобы было округление до меньшего, т.к. нам нужно количество полных лет)

count_of_days_1 = jul(day_1, month_1, year_1)
count_of_days_2 = jul(day_2, month_2, year_2)
count_of_years = int((count_of_days_2 - count_of_days_1)/365)

>>> count_of_years

p.s. разные исключения, которые возможны или их обработка - напишите сами.

→ Ссылка
Автор решения: SergFSM

Выведите количество прошедших лет.

если вопрос стоит именно так, то задача упрощается - просто вычитаем из одного года другой, ну и уменьшаем на единицу если год не полный:

d1,m1,y1 = map(int,input().split())
d2,m2,y2 = map(int,input().split())

res = y2-y1-(m1>m2 or m1==m2 and d1>d2)
→ Ссылка