Есть ли возможность перевести timedelta в int?
Вкратце суть функции вернуть количество дней в конкретном месяце используя модуль datetime. Работает исправно, возвращает timdelta
import datetime
def days_in_month(year, month):
year_for1=year
if month==12:
month_for1=1
year_for1=year+1
else:
month_for1=month+1
date1=datetime.date(year_for1,(month_for1),1)
date2=datetime.date(year,month,1)
print(date1-date2)
a=date1-date2
return a
Вторая функция проверяет действительность этой даты, ошибка в day<days_in_month(year,month)
вот что мне вернул компилятор
File 'datetime.py', Line 363: AttributeError: 'int' object has no attribute 'name'
def is_valid_date(year, month, day):
"""
Inputs:
year - an integer representing the year
month - an integer representing the month
day - an integer representing the day
Returns:
True if year-month-day is a valid date and
False otherwise
"""
if (year>=datetime.MINYEAR and year<=datetime.MAXYEAR
and month<=12 and month>=1 and day<days_in_month(year,month)):
return True
return False
print(is_valid_date(2020,4,1))
Ответы (1 шт):
Количество дней в timedelta можно получить через его свойство days - значение этого свойства и возвращайте из функции:
def days_in_month(year, month):
...
a=date1-date2
return a.days
Тогда сравнение day < days_in_month(year,month) будет работать.
Также можно наоборот, переводить день в timedelta, но это логичнее делать для сравнения периодов времени, а не для проверки попадания дня в период времени:
from datetime import timedelta
print(timedelta(days=10) < timedelta(days=20))
# True, т.е. период в 10 дней меньше периода в 20 дней