How to get the last day of the month?

后端 未结 30 2989
迷失自我
迷失自我 2020-11-22 06:13

Is there a way using Python\'s standard library to easily determine (i.e. one function call) the last day of a given month?

If the standard library doesn\'t support

30条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-22 06:55

    The easiest way (without having to import calendar), is to get the first day of the next month, and then subtract a day from it.

    import datetime as dt
    from dateutil.relativedelta import relativedelta
    
    thisDate = dt.datetime(2017, 11, 17)
    
    last_day_of_the_month = dt.datetime(thisDate.year, (thisDate + relativedelta(months=1)).month, 1) - dt.timedelta(days=1)
    print last_day_of_the_month
    

    Output:

    datetime.datetime(2017, 11, 30, 0, 0)
    

    PS: This code runs faster as compared to the import calendarapproach; see below:

    import datetime as dt
    import calendar
    from dateutil.relativedelta import relativedelta
    
    someDates = [dt.datetime.today() - dt.timedelta(days=x) for x in range(0, 10000)]
    
    start1 = dt.datetime.now()
    for thisDate in someDates:
        lastDay = dt.datetime(thisDate.year, (thisDate + relativedelta(months=1)).month, 1) - dt.timedelta(days=1)
    
    print ('Time Spent= ', dt.datetime.now() - start1)
    
    
    start2 = dt.datetime.now()
    for thisDate in someDates:
        lastDay = dt.datetime(thisDate.year, 
                              thisDate.month, 
                              calendar.monthrange(thisDate.year, thisDate.month)[1])
    
    print ('Time Spent= ', dt.datetime.now() - start2)
    

    OUTPUT:

    Time Spent=  0:00:00.097814
    Time Spent=  0:00:00.109791
    

    This code assumes that you want the date of the last day of the month (i.e., not just the DD part, but the entire YYYYMMDD date)

提交回复
热议问题