我想使用日期时间确定两个日期之间所有月份的名称

问题描述 投票:0回答:2
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年。必须根据月份的顺序对列表进行排序。此代码不适用于这种情况。

python datetime
2个回答
0
投票

您可以使用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)

[['八月','九月','十月','十一月','十二月','一月']


0
投票

问题出在您的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)


0
投票

这是使用熊猫的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')
© www.soinside.com 2019 - 2024. All rights reserved.