我有两个约会,比如04-2012和05-2014
我需要找到一种方法来获得两个日期之间的所有月份和年份。
例如:
04-2012
05-2012
...
04-2014
05-2014
我试图在这个范围内循环,但是我在上个月没有停下来。
答案 0 :(得分:0)
这样做的一种方法如下:
from datetime import datetime, timedelta
d1 = '04-2012'
d2 = '05-2014'
t1 = datetime.strptime(d1, "%m-%Y")
t2 = datetime.strptime(d2, "%m-%Y")
delta = timedelta(days=20)
out_dates = []
while t1 <= t2:
date_str = t1.strftime('%m-%Y')
if date_str not in out_dates:
out_dates.append(date_str)
t1 += delta
print(out_dates)
% gives: ['04-2012', '05-2012', '06-2012', '07-2012', '08-2012', '09-2012', '10-2012', '11-2012', '12-2012', '01-2013', '02-2013', '03-2013', '04-2013', '05-2013', '06-2013', '07-2013', '08-2013', '09-2013', '10-2013', '11-2013', '12-2013', '01-2014', '02-2014', '03-2014', '04-2014', '05-2014']
它会按天打印,但您可以稍后将其过滤几个月甚至几年。
答案 1 :(得分:0)
假设您的日期格式正确,您可以使用timedelta和一个简单的帮助方法。 https://docs.python.org/2/library/datetime.html#datetime.timedelta
from datetime import timedelta
def dates_in_between(date1, date2):
date_count = date1
while(date1 < date2):
date_count = date + timedelta(months = 1)
print date_count
答案 2 :(得分:0)
也许这可以帮助您解决问题:
first_month, first_year = map(int, "04-2012".split("-"))
last_month, last_year = map(int, "05-2014".split("-"))
year = first_year
while year <= last_year:
print year
month = first_month if year == first_year else 1
end_month = last_month if year == last_year else 12
while month <= end_month:
print "%0.2d-%d" % (month, year)
month += 1
year += 1
答案 3 :(得分:0)
很容易达到datetime
等等,但您也可以通过一个简单的循环来解决它:
for year in range(2012, 2015):
for month in range(1, 13):
if (year, month) >= (2012, 4) and (year, month) <= (2014, 5):
print "%02d-%s" % (month, year)
答案 4 :(得分:0)
让dateutil成为你的朋友:
import datetime
from dateutil.rrule import rrule, MONTHLY
d1 = datetime.datetime(2014,2,1)
d2 = datetime.datetime(2015,1,1)
print [d for d in rrule(MONTHLY, dtstart=d1, until=d2)]