Есть ли возможность перевести 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 шт):

Автор решения: insolor

Количество дней в 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 дней
→ Ссылка