import datetime
import calendar
dateStart = datetime.date(2017, 8, 2)
dateEnd = datetime.date(2018, 1, 1)
st = dateStart.month
ed = dateEnd.month
lis = []
for i in range(st, ed + 1):
lis.append(calendar.month_name[i])
print(lis)
我期望的输出是:
['January', 'August', 'September', 'October', 'November', 'December']
'January'
属于2018年。必须根据月份的顺序对列表进行排序。此代码不适用于这种情况。
您可以使用relativedelta
:
from dateutil.relativedelta import relativedelta
import datetime
import calendar
dateStart = datetime.date(2017,8,2)
dateEnd = datetime.date(2018,1,1)
st = datetime.date(dateStart.year, dateStart.month, 1)
ed = dateEnd
tmp = st
lis=[]
while tmp <= dateEnd:
lis.append(calendar.month_name[tmp.month])
tmp += relativedelta(months=1)
print(lis)
[['八月','九月','十月','十一月','十二月','一月']
问题出在您的range()
中,当您输入range(8,1)
时,它将返回0步,因为您无法将8加到1。
您可以尝试下面的代码以作一些改进:
if st < ed:
for i in range(st, ed+1):
lis.append(calendar.month_name[i])
else:
for i in range(st, ed+1, -1):
lis.append(calendar.month_name[i])
print(lis)
但是请不要忘记是否使用相同的安装座,这将无法正常工作。 (2017,8,2/2018,8,1)
这是使用熊猫的pd.date_range
的一种方法:
import pandas as pd
d = dict(enumerate(calendar.month_name))
pd.date_range(dateStart, dateEnd, freq='MS').month.sort_values().map(d)
# Index(['January', 'September', 'October', 'November', 'December'], dtype='object')