2012-05-11 41 views
0

如何獲得兩個日期之間的特定月份和工作日的數量。兩個日期之間的特定月份/工作日的數量

如果日期

datetime.datetime(2004, 01, 01) 
datetime.datetime(2005, 10, 01) 

我想我作爲

{'January':2, 'February':2, ..., 'December':1} 
{'Monday':xx, ..., 'Sunday':xx} 

回答

5

輸出在Python 2.7:

from datetime import datetime 
from dateutil import rrule 
import itertools as it 
from collections import Counter 

rule = rrule.rrule(rrule.DAILY, 
        dtstart=datetime(2004, 01, 01), 
        until=datetime(2005, 10, 01)) 

dict(Counter(d.strftime('%A') for d in rule)) 
# {'Friday': 92, 
# 'Monday': 91, 
# 'Saturday': 92, 
# 'Sunday': 91, 
# 'Thursday': 92, 
# 'Tuesday': 91, 
# 'Wednesday': 91} 

dict(Counter(k for k,v in it.groupby(d.strftime('%B') for d in rule))) 
# or 
dict(Counter(k for k,v in it.groupby(rule, key=lambda x: x.strftime('%B')))) 

# {'April': 2, 
# 'August': 2, 
# 'December': 1, 
# 'February': 2, 
# 'January': 2, 
# 'July': 2, 
# 'June': 2, 
# 'March': 2, 
# 'May': 2, 
# 'November': 1, 
# 'October': 2, 
# 'September': 2} 

正如@ thg435正確地評論說:dateutil不是標準的Python圖書館。但是,可以用以下命令代替:

dtstart = datetime(2004, 01, 01) 
until = datetime(2005, 10, 01) 
rule = [dtstart + timedelta(i) for i in xrange((until - dtstart).days + 1)] 
+2

創意!值得指出的是,dateutil是非標準的(在這種情況下可以很容易地用timedelta代替)。 – georg

相關問題