返回月份的最后一天,表示年份范围 - Python



我有一些代码返回2017年每个月的最后一天。

结果:

2017-01-31
2017-02-28
2017-03-31
2017-04-30
2017-05-31
2017-06-30
2017-07-31
2017-08-31
2017-09-30
2017-10-31
2017-11-30
2017-12-31

但是,我想让它包括2014年至2017年,而不仅仅是2017年。我无法在网上找到任何可以做到这一点的东西,自己也无法弄清楚。所有的帮助/建议将不胜感激。

这是我的代码:

import arcpy
import datetime 
from datetime import timedelta
import time
import calendar
#returns last day of each month
def lastdayofmonth(anyday):
    nextmonth = anyday.replace(day=28) + datetime.timedelta(days=4)
    return next_month - datetime.timedelta(days=nextmonth.day)
for month in range(1, 13):
    print (lastdayofmonth(datetime.date(2017, month, 1)))

只需添加一个for循环并像对月份所做的那样遍历年份:

for year in range(2014,2018):
    for month in range(1, 13):
        print (lastdayofmonth(datetime.date(year, month, 1)))

这可能是你想要的:

import calendar
{(k, m): calendar.monthrange(k, m)[1] for k in range(2014, 2018) for m in range(1, 13)}
# {(2014, 1): 31,
#  (2014, 2): 28,
#  (2014, 3): 31,
#  etc

正如 VIG 所说,您可以按照预期范围运行第二个循环到迭代器年份。顺便说一句,我运行您的代码出现错误,说next_month没有定义。您的代码应修复如下:

import datetime
from datetime import timedelta
import time
import calendar
#returns last day of each month
def lastdayofmonth(anyday):
    nextmonth = anyday.replace(day=28) + datetime.timedelta(days=4)
    return nextmonth - datetime.timedelta(days=nextmonth.day)

for j in range(2014,2018):
    for month in range(1, 13):
        print (lastdayofmonth(datetime.date(j, month, 1)))

最新更新