2016-05-11 62 views
1

我有「%Y%m%d」格式的字符串(即今天2016年5月11日的「20160511」)。並且需要以編程方式查找(以python爲例)如果另一個日期(比如說「 - 20160504」或「20160512」)作爲參數發送給屬於當前周的函數(當前是今天是5月8日星期日開始的一週) 2016年 - 讓我們假設這是一週的美國式,從星期天開始,即第一個應該返回False,第二個是True)。如果一個給定的日期屬於當前的星期,那麼python會怎麼樣呢?

我想出了所有的想法來計算該星期日的日期,並將通過的參數作爲參數進行比較,然後,如果日期是未來,則不是在當前星期的星期六之後,但它看起來不夠優雅(或「pythonic」)。

+0

有你看了['datetime'(https://docs.python.org/2/library/datetime.html)模塊? – tom10

+1

使用'datetime.datetime.today()。weekday()',然後比較它減去加上基於'7'的當前日期,看看它是否在裏面。 pythonic明智這可能是你可以簡單地擴展自己的日期時間庫。製作自己的庫擴展就像使用現有的擴展庫一樣Python :) –

+1

如果你已經有星期日的日期字符串,你可以做一些類似'return int(string_for_sunday) - int(date_string)in range(7)'這可以確保目前的字符串是在星期天之後的7天內。 @ User2910293說,使用datetime的內置日期比較肯定會更好。 –

回答

5

可以使用isodate方法datetime對象:

datetime.datetime.strptime('20160511','%Y%m%d').isocalendar()[1] 

將在本週返回一個整數,這樣就可以比較兩個日期看,如果他們在同一個星期的一部分。這裏是一個函數,會做,對於兩個不同的日期:

import datetime 

def same_week(date1, date2): 
    d1 = datetime.datetime.strptime(date1,'%Y%m%d') 
    d2 = datetime.datetime.strptime(date2,'%Y%m%d') 
    return d1.isocalendar()[1] == d2.isocalendar()[1] \ 
       and d1.year == d2.year 

要獲得當天,使用datetime.datetime.today()。因此,改寫上述功能做的正是你問:

import datetime 

def same_week(dateString): 
    '''returns true if a dateString in %Y%m%d format is part of the current week''' 
    d1 = datetime.datetime.strptime(dateString,'%Y%m%d') 
    d2 = datetime.datetime.today() 
    return d1.isocalendar()[1] == d2.isocalendar()[1] \ 
       and d1.year == d2.year  
+0

Python的問題總是得到最快的答案大聲笑。 +1 tho。很好的例子,沒有立即來到我身邊。 –

+0

datetime.strptime('20160511','%Y%m%d')。isocalendar()[1]返回19.我該怎麼處理它?這是什麼意思? – earlyadopter

+0

@ User2910293謝謝:)作爲其他人的雅說:「當心忍者」 – rofls

相關問題