使用规则将日期分配给相关月份
Using rrule to assign days to relevant months
我能够像这样使用 rrule 列出两个日期之间的天数:
from dateutil import rrule
from datetime import datetime
a = '20180306'
b = '20180506'
for dt in rrule.rrule(rrule.DAILY,
dtstart = datetime.strptime(a, '%Y%m%d'),
until = datetime.strptime(b, '%Y%m%d')):
print (dt.strftime('%Y%m%d'))
给出的输出是:
20180306
20180307
...
20180408
20180409
...
20180506
我怎样才能将这些天分配给它们的相关月份以给出输出:
March-18: 26 days
April-18: 30 days
May-18: 6 days
我也很好奇如何扩展它以在计算中包括小时数,即。
March-18: 11.9 days
谢谢
black.mamba
您可以使用itertools.groupby
并提取每组的长度。在下面的示例中,grouper
和 res
都是惰性迭代器,因此您可以通过迭代提取结果。
from dateutil import rrule
from datetime import datetime
from itertools import groupby
a = '20180306'
b = '20180506'
rule = rrule.rrule(rrule.DAILY,
dtstart=datetime.strptime(a, '%Y%m%d'),
until=datetime.strptime(b, '%Y%m%d'))
grouper = groupby(rule, key=lambda x: x.strftime('%B-%y'))
res = ((i, len(list(j))) for i, j in grouper)
for month, count in res:
print('{0}: {1} days'.format(month, count))
March-18: 26 days
April-18: 30 days
May-18: 6 days
我能够像这样使用 rrule 列出两个日期之间的天数:
from dateutil import rrule
from datetime import datetime
a = '20180306'
b = '20180506'
for dt in rrule.rrule(rrule.DAILY,
dtstart = datetime.strptime(a, '%Y%m%d'),
until = datetime.strptime(b, '%Y%m%d')):
print (dt.strftime('%Y%m%d'))
给出的输出是:
20180306
20180307
...
20180408
20180409
...
20180506
我怎样才能将这些天分配给它们的相关月份以给出输出:
March-18: 26 days
April-18: 30 days
May-18: 6 days
我也很好奇如何扩展它以在计算中包括小时数,即。
March-18: 11.9 days
谢谢 black.mamba
您可以使用itertools.groupby
并提取每组的长度。在下面的示例中,grouper
和 res
都是惰性迭代器,因此您可以通过迭代提取结果。
from dateutil import rrule
from datetime import datetime
from itertools import groupby
a = '20180306'
b = '20180506'
rule = rrule.rrule(rrule.DAILY,
dtstart=datetime.strptime(a, '%Y%m%d'),
until=datetime.strptime(b, '%Y%m%d'))
grouper = groupby(rule, key=lambda x: x.strftime('%B-%y'))
res = ((i, len(list(j))) for i, j in grouper)
for month, count in res:
print('{0}: {1} days'.format(month, count))
March-18: 26 days
April-18: 30 days
May-18: 6 days