我试图找出两个日期之间的月份。如果我从5月14日开始,于7月16日离开。我也必须支付五月和七月的全额租金。我也按排序顺序打印月份。
我将输入值设为:
dateStart=datetime.date(input_list[0],input_list[1],input_list[2])
dateEnd=datetime.date(input_list[3],input_list[4],input_list[5])
输入为:
[2017,8,2,2018,1,1] -- format(yyyy,mm,dd)
我试图获得的输出:
['January', 'August', 'September', 'October', 'November', 'December']
有人可以在这里帮助我如何实现这一目标。
答案 0 :(得分:1)
这应该可以解决您的问题,并返回带有月份名称的数组months
import calendar
import pandas as pd
input_list = [2017,8,2,2018,1,1]
dateStart=pd.datetime(input_list[0],input_list[1],input_list[2])
dateEnd=pd.datetime(input_list[3],input_list[4],input_list[5])
months = []
y = dateStart.year
m = dateStart.month
while pd.datetime(y,m, 1) <= dateEnd:
months.append(calendar.month_name[m])
if m == 12:
y += 1
m= 1
else:
m+=1
print(months)
['August', 'September', 'October', 'November', 'December', 'January']
编辑
import calendar
import pandas as pd
input_list = [2017,8,2,2018,1,1]
dateStart=pd.datetime(input_list[0],input_list[1],input_list[2])
dateEnd=pd.datetime(input_list[3],input_list[4],input_list[5])
months = []
new_months = []
y = dateStart.year
m = dateStart.month
ny=False
while pd.datetime(y,m, 1) <= dateEnd:
if ny==True:
new_months.append(calendar.month_name[m])
else:
months.append(calendar.month_name[m])
if m == 12:
y += 1
m= 1
ny=True
else:
m+=1
print(new_months+months)
['January', 'August', 'September', 'October', 'November', 'December']
答案 1 :(得分:1)
months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
ans = set()
while dateStart <= dateEnd:
ans.add(dateStart.month)
dateStart += datetime.timedelta(1)
print([months[x-1] for x in sorted(ans)])
答案 2 :(得分:1)
dateStart=datetime.date(input_list[0],input_list[1],input_list[2])
dateEnd=datetime.date(input_list[3],input_list[4],input_list[5])
# import the calendar
import calendar
months = [ ]
for i in range(dateStart.year * 12 + dateStart.month, dateEnd.year*12+ dateEnd.month + 1):
months.append(datetime.date((i-13) // 12 + 1, (i-1) % 12 + 1, 1).month)
# sort the months
months = sorted(months)
# collect the Months Name in an order
months_Name = []
# code for months name
for i in months:
months_Name.append(calendar.month_name[i])
# display the Months in an order
print(months_Name)
答案 3 :(得分:0)
尝试
import datetime
dateStart=datetime.date(2017,8,2)
dateEnd=datetime.date(2018,1,1)
dateRnd = datetime.date(dateStart.year, dateStart.month, 1)
while dateRnd<=dateEnd:
print(dateRnd.strftime('%B'))
dateRnd = datetime.date(dateRnd.year + int((dateRnd.month / 12)), ((dateRnd.month % 12) + 1), 1)