web-dev-qa-db-ja.com

Pythonで日付が他の2つの日付の間にあるかどうかを確認するにはどうすればよいですか?

私は次のコードを持っています:

if date in (start, end):
        print 'in between'
else:
        print 'No!'

日付、開始、終了はすべて1/1の形式の変数です。適切な結果を印刷するにはどうすればよいですか?私は10/2として日付を試み、3/14として開始し、11/7として終了し、「No!」と印刷されました。つまり、正しく実行されていません。それらを日付形式にフォーマットしてから比較する必要があると思います。助けてくれてありがとう!

39
widget

まだ満足していないので、別の答えがあります。日時と年を使用しません。

組み込みのタプルを使用して比較するだけです。

d1 = (3, 28)
d2 = (3, 31)
d3 = (4, 2)
if d1 < d2 < d3:
    print("BETWEEN!")
else:
    print("NOT!")

次のようなタプルを簡単に作成できます。

day = 16
month = 4
d = (month, day)
39
Maciej Ziarko

すべての日付を datetime.date 、次のように記述できます。

if start <= date <= end:
    print "in between"
else:
    print "No!"
73
Björn Pollex

使用する datetime.date

http://docs.python.org/library/datetime.html#datetime.date

<演算子は特別にオーバーロードされます。

date1 < date2-date1がdate2よりも前にある場合、date1はdate2よりも小さいと見なされます。

>>> from datetime import date
>>> d1 = date(2011, 3, 28)
>>> d2 = date(2011, 3, 22)
>>> d3 = date(2011, 4, 3)
>>> d2 < d1 < d3
True

またはあなたのprgramで:

from datetime import date

d1 = date(2011, 3, 28)
d2 = date(2011, 3, 22)
d3 = date(2011, 4, 3)

if d2 < d1 < d3:
    print 'in between'
else:
    print 'No!'
21
Maciej Ziarko
from datetime import datetime

date_format = "%m/%d/%Y"

a = datetime.strptime('8/18/2008', date_format)

b = datetime.strptime('9/26/2007', date_format) # Date to be checked

c = datetime.strptime('9/25/2008', date_format)

d = datetime.strptime('8/18/2008', date_format)  #Date entered here should always be the same as 'a'

delta1 = b - a

delta2 = c - b

delta3 = d - a

if delta1.days >= delta3.days and delta2.days >= delta3.days:

    print 'In between'

else:

    print 'Not in between'
2