我有一些代码返回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)))