<p>我能想到的唯一方法是循环每天并分析它所属的月份:</p>
<pre><code>import time, collections
SECONDS_PER_DAY = 24 * 60 * 60
def monthlyBedDays(admission, discharge, fy=None):
start = time.mktime(time.strptime(admission, '%d-%b-%Y'))
end = time.mktime(time.strptime( discharge, '%d-%b-%Y'))
if fy is not None:
fy = str(fy)
start = max(start, time.mktime(time.strptime('01-Apr-'+fy[:2], '%d-%b-%y')))
end = min(end, time.mktime(time.strptime('31-Mar-'+fy[2:], '%d-%b-%y')))
days = collections.defaultdict(int)
for day in range(int(start), int(end) + SECONDS_PER_DAY, SECONDS_PER_DAY):
day = time.localtime(day)
key = time.strftime('%Y-%m', day) # use '%b' to answer the question exactly, but that's not such a good idea
days[ key ] += 1
return days
output = monthlyBedDays(admission="01-Jan-2018", discharge="25-Apr-2018")
print(output)
# Prints:
# defaultdict(<class 'int'>, {'2018-01': 31, '2018-02': 28, '2018-03': 31, '2018-04': 25})
print(monthlyBedDays(admission="01-Jan-2018", discharge="25-Apr-2018", fy=1718))
# Prints:
# defaultdict(<class 'int'>, {'2018-01': 31, '2018-02': 28, '2018-03': 31})
print(monthlyBedDays(admission="01-Jan-2018", discharge="25-Apr-2018", fy=1819))
# Prints:
# defaultdict(<class 'int'>, {'2018-04': 25})
</code></pre>
<p>请注意,输出是一个<code>defaultdict</code>,因此,如果您向它询问任何月份中没有记录的天数(或任何键)(例如<code>output['1999-12']</code>),它将返回0。还请注意,我对输出键使用了<code>'%Y-%m'</code>格式。与使用最初请求的密钥类型(<code>'%b'</code>->;<code>'Jan'</code>)相比,对输出进行排序和消除月份间的歧义变得更加容易。在</p>