获取python中的月份的最后一天

时间:2017-03-23 01:14:32

标签: python date

12月份出错。

  

ValueError:month必须在1..12

def last_day_of_month(ds):
    cur_ds = datetime.strptime(ds, '%Y-%m-%d')
    next_month = datetime(year=cur_ds.year, month=cur_ds.month+1, day=1)
    last_day_month = next_month - timedelta(days=1)
    return datetime.strftime(last_day_month, '%Y-%m-%d')

print last_day_of_month('2016-12-01')

4 个答案:

答案 0 :(得分:2)

你不能在一个月13的时候制作一个datetime。所以你必须找到一种解决方法。一个简单的解决方案是将递增的月份转换为额外的年份:

# Reduce 12 to 1, 0 and all other #s to 0, #
extrayear, month = divmod(cur_ds.month, 12)
# Add 1 or 0 to existing year, add one to month (which was reduced to 0-11)
next_month = datetime(year=cur_ds.year + extrayear, month=month + 1, day=1)

答案 1 :(得分:2)

在第3行month=cur_ds.month+1,您提供的第13个月无效。如果您想计算给定月份的最后一天,您还可以使用日历库中的月份范围。

>>import calendar
>>year, month = 2016, 12
>>calendar.monthrange(year, month)[1]
31

答案 2 :(得分:0)

您将12作为当月传递,然后添加一个获取next_month,并将其设为13。检查12案例,然后设置month=1

答案 3 :(得分:0)

这就是我的方法。

x = int(input())

while 20 <= x <= 98:
    print(x, end='\n')
    if x % 11 == 0:
        break
    x -= 1

else:
    print("Input must be 20-98")