2011-05-30 240 views
16

Eg1。假設我有一天4/30/07,那麼我需要得到4/27/07。例如:在Python中查找前一週/上週的星期五

Eg2。假設我有一天6/29/07,那麼我需要得到6/22/07。

+4

不一定。實際上,我只是寫了一個非常相似的代碼(比較那周的隨機日期表示的一週的星期一),我的一個網站的時間表不到一天。 – ThiefMaster 2011-05-30 06:11:10

+0

是的,它的工作及其工作。感謝您的快速回復。 – Jibin 2011-05-30 06:37:27

回答

37

假設daydatetime.datedatetime.datetime對象,此代碼創建用於上週週五datetime/date對象:

friday = day - timedelta(days=day.weekday()) + timedelta(days=4, weeks=-1) 

說明:timedelta(days=day.weekday())是星期一和day之間的偏移,從而將4天,並減去一個周將在上週的星期五爲您提供幫助。

當然你也可以簡化這個(+4d -1w = -3d):

friday = day - timedelta(days=day.weekday() + 3) 

注:要獲得timedelta,使用from datetime import timedelta或者只是import datetime並使用datetime.timedelta

+4

週六和週日不適用。試試這個:'friday = day - timedelta(days =(day.weekday() - 4)%7,weeks = -1)' – 2012-09-03 21:50:32

+0

你有這個問題嗎?我測試了2012-09-08和2012-09-09,我的代碼正確地給了我2012-08-31,而你的結果是2012-09-14 – ThiefMaster 2012-09-04 01:14:34

+2

我的代碼應該是'weeks = 0'(或者省略參數) 。我錯過了張貼。另外,期望的結果取決於「上一週/上週」的含義以及是否定義從週日或週一開始的一週。我可能誤解了這個問題。我的(更正的)代碼給出了最近的星期五。 – 2012-09-04 17:11:38

16

的另一種更容易的方法是使用python-dateutil。 爲了得到前一週五:

>>> from dateutil.relativedelta import relativedelta, FR 
>>> from datetime import datetime 
>>> datetime(2015, 7, 8) + relativedelta(weekday=FR(-1)) 
datetime.datetime(2015, 7, 3, 0, 0) 

而接下來的週五:

>>> datetime(2015, 7, 8) + relativedelta(weekday=FR(+1)) 
datetime.datetime(2015, 7, 10, 0, 0) 
+0

我真的很喜歡這個解決方案:) – vgoklani 2016-03-21 13:51:36

2

不具體到週五,但由於每天 「taget_dayofweek」(其中週一是0和週日爲6)

from datetime import datetime 

target_dayofweek = 4 # Friday 
current_dayofweek = datetime.now().weekday() # Today 


if target_dayofweek <= current_dayofweek: 
    # target is in the current week 
    endDate = datetime.now() - timedelta(current_dayofweek - target_dayofweek) 

else: 
    # target is in the previous week 
    endDate = datetime.now() - timedelta(weeks=1) + timedelta(target_dayofweek - current_dayofweek) 
相關問題