获取两个日期之间的月份

时间:2020-03-10 13:59:40

标签: python-3.x pandas

我试图找出两个日期之间的月份。如果我从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']

有人可以在这里帮助我如何实现这一目标。

4 个答案:

答案 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)