2014-06-23 38 views
-1

我已經做了一些研究,並沒有發現任何接近我想要的東西。開始我很新的python,所以我的python大部分不是'pythonic'..不管我想要的是獲得每週的開始日期和結束日期導致到當前日期。主要是我想得到建議什麼方式去做,因爲有多種不同的方式來做到這一點。我應該考慮從week number開始構建它嗎?或者只是使用datetime得到每週的開始和結束日期,導致到當前日期

我希望能建立它在這種格式

[{ 
    'start': 2013-12-30, 
    'end': 2014-01-05 
},{ 
    'start': 2014-01-06, 
    'end': 2014-01-12 
}... etc] 

我的初步嘗試:

from datetime import date, timedelta 

def get_week_days(self, year, week, **kwd): 
    d = date(year,1,1) 
    if(d.weekday()>3): 
     d = d+timedelta(7-d.weekday()) 
    else: 
     d = d - timedelta(d.weekday()) 
    dlt = timedelta(days = (week-2)*7) 
    last_wk = {} 
    last_wk['start'] = d + dlt 
    last_wk['end'] = d + dlt + timedelta(days=6) 
    return last_wk 

這個返回由週數給定的一週的開始和結束日期。我可以做一個循環,並將這個函數稱爲一年中的週數,但我不確定這是否有效,或者是否可以/應該清除此方法?

,我應該如何去將是有益的:)謝謝

+0

從1月1日開始,你的每個星期都開始嗎?另外我很好奇,我知道在歐洲,格式化日期的常見格式爲dd/mm/yyyy,但是誰使用yyyy-dd-mm? ISO標準是yyyy-mm-dd,看到相反的結果令人困惑。 –

+0

從1月1日開始的一週僅僅是一個例子。格式是另一個例子。它在yyyy-mm-dd,我只是把它寫回來。即時通訊使用yyyy-mm-dd,因爲這是它在數據庫中的佈局,我必須與之合作:)我繼續爲您編輯它,所以它的格式正確並且日期正確 –

回答

2

所以,調用你的方法在一個循環中肯定會工作的建議。這樣做的缺點是每次調用該方法都必須重新創建所有內容。由於數週是順序的,因此找到第一週可能會更好,然後再增加1天以查找下週的開始。這樣您就可以構建出您之前的工作,而無需重新創建所有對象。

這樣做的一種方法是使用getNextWeek方法。

def getNextWeek(week): 
    nextWeek = {}; 
    nextWeek['start'] = week['end'] + timedelta(days=1) 
    nextWeek['end'] = nextWeek['start'] + timedelta(days=6) 
    return nextWeek 
+0

好吧,看起來可行:)所以我寫的方法似乎有一個問題,因爲如果我的週數是0,1或2,它會在2013年12月30日之前返回幾周。你知道我的錯誤在哪裏嗎? –

+1

@JohnRuddell我沒有用'date'或'timedelta'做很多事情,但我敢打賭文檔對這種行爲有一個解釋。 –

+1

好的,謝謝你的建議! –

相關問題