2012-06-11 68 views
9

因此,我有一個腳本,它具有不同功能的日期參數,我希望它通過01-01-201206-09-2012循環,不包括週末。林試圖找出一種方法,我可以用時間差,因爲我的腳本輸出與例如文件的名稱中使用的日期文件:我想timedelta(1)循環通過每個日期,以便循環除日期以外的日期

items = (functions.getItems(item,date) 
    print items 
    test = sum(abs(l[-1]) for l in items) 
    total = open('total' +str(datetime.today- datetime.timedelta(1)),'a') 

輸出文件在第一天的格式將爲total2012-01-01,並循環顯示,直至創建文件total2012-06-09。也爲項目的日期的說法有MM-DD-YYYY

我認爲我能做到這一點的格式:

sd = 01-01-2012 
ed = 06-09-2012 
delta = datetime.timedelta(days=1) 
diff = 0 
while sd != ed 
    # do functions 
    # (have output files (datetime.today - datetime.delta(diff)) 
    diff +=1 
    sd+=delta 

所以基本上我只是想弄清楚如何我可以通過具有功能與啓動循環01-01-2012並以06-10-2012結束,不包括週末。我無法搞清楚如何排除週末和如何得到它的循環在正確的順序

感謝

+3

請避免使用日期在格式MM-DD-YYYY。這是非常令人困惑的,因爲這些要素既沒有增加也沒有降低的幅度。此外,它很容易與DD-MM-YYYY混合使用,這是ISO標準YYYY-MM-DD之後的第二種最合理的日期格式。 – Celada

+0

我同意@Celada,如果可能,請使用ISO格式。如果這是不可能的,請使用'/'而不是'-'作爲分隔符來減少混淆。 –

回答

12

使用datetime.weekday()方法。它返回0到6之間的值,與平日有關。星期六值爲5,星期日值爲6;所以,如果你跳過操作時,這些值出現,你跳過weekdends:

start = datetime(2012, 1, 1) 
end = datetime(2012, 10, 6) 
delta = timedelta(days=1) 
d = start 
diff = 0 
weekend = set([5, 6]) 
while d <= end: 
    if d.weekday() not in weekend: 
     diff += 1 
    d += delta 
+0

它給出了這個錯誤親愛的'TypeError:'模塊'對象不可調用' –

+2

@PriyanRockZ你可能導入它爲'import datetime'。嘗試使用'from datetime import datetime'來代替。 – brandizzi

+0

感謝親愛的朋友brandizzi.its解決:-) –

1

@ brandizzi的回答是更語法美感,但作爲替代,你可以使用下面的

start = datetime(2012, 1, 1) 
end = datetime(2012, 10, 6) 
delta = timedelta(days=1) 
d = start 
diff = 0 
SATURDAY = 5 
while d <= end: 
    if d.weekday() < SATURDAY: 
     diff += 1 
     d += delta