2016-05-11 7 views
1

"%Y%m%d"形式の文字列(今日は2016年5月11日の場合は「20160511」)があります。関数にパラメータとして送信する別の日付( "20160504"または "20160512")が現在の週に属しているかどうかをプログラムで(Pythonで)調べる必要があります(現在の週は現在の週が5月8日2016 - それは日曜日から始まる週のアメリカの方法であると仮定しましょう。すなわち、最初のものはFalse、2番目のものはTrueです。特定の日付が現在の週に属しているかどうかを調べるにはどうすればよいでしょうか?

私が思いついたすべてのアイデアは、その日曜日の日付を計算し、渡されたパラメータをパラメータと比較し、その日が将来の場合は現在の土曜日の土曜日の後ではないことになりますしかし、それは十分にエレガント(または "ピジョンソニック")には見えません。

+0

あなたは[ 'datetime'](https://docs.python.org/2/library/datetime.html)を見てきましたモジュール? – tom10

+1

'datetime.datetime.today()。weekday()'を使い、 '7'に基づいてマイナスプラス現在の日付を比較し、それが内部にあるかどうかを確認します。 Pythonによると、これはおそらくあなたが 'date time'ライブラリに自分自身を拡張することができるものです。あなた自身のライブラリ拡張を作ることは、既存のPythonを使用する場合と同じです:) –

+1

sundayの日付文字列がすでにある場合は、 'return int(string_for_sunday) - int(date_string)in range(7)'のようにすることができます。現在の文字列が日曜日の7日以内であることを示します。間違いなく、@ User2910293のようにdatetimeの組み込み日付比較を使用する方が良いでしょう。 –

答えて

5

あなたはDateTimeオブジェクト用isodate方法を使用することができます。

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

あなたは、彼らが同じ週の一部だかどうかを確認するために、2つの日付を比較できるように、それは、整数として現在の週を返します。

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()を使用し、現在の日付を取得するには:ここでは、2つの異なる日付のためにそれを行うだろう機能があります。だから、あなたが求めている正確に何をするために、上記の機能を書き換える:

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

関連する問題