Как посчитать разницу двух дат на питоне?
Конечно легко это сделать, импортируя календарь используя тайм сплит и др. А как это сделать без всяких импортировок и вводов? То есть:
Формат входных данных
Даны два дня в формате: день, месяц и год. Года в обеих датах не превышают 105 и гарантируется, что первый день строго раньше второго дня.
Формат результата
Выведите количество прошедших лет.
Например: ввод
1 9 2011
10 9 2012вывод
1
и др?
Ответы (2 шт):
Отличный вариант вам предложил Алексей Р, если не брать в расчет никакие библиотеки. И оно вам максимально подходит, т.к. количество лет у вас всего до 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. разные исключения, которые возможны или их обработка - напишите сами.
Выведите количество прошедших лет.
если вопрос стоит именно так, то задача упрощается - просто вычитаем из одного года другой, ну и уменьшаем на единицу если год не полный:
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)