5

ユーザーが日付を入力し、それを別の日付と比較してどちらが先かを確認するプログラムがあります。

ユーザーが 2 月 29 日を入力し、プログラムが代わりに 2 月 28 日を返すコードを作成するにはどうすればよいでしょうか (閏年がないため)。

例:

def date(prompt):
''' returns the date that user inputs and validates it'''  
while True:
    try:
        date = raw_input(prompt)
        if len(date) >= 5:
            month = date[0:2]
            day = date[3:5]
        dateObject = datetime.date(2011, int(month), int(day))
        return dateObject
    except ValueError:
            print "Please enter a valid month and day"
4

2 に答える 2

6

どのように日付を比較しますか? 関数を使用する場合datetime、これはすでにこの種のものを説明しているはずです。

>>> datetime.datetime(2011, 2, 28)
datetime.datetime(2011, 2, 28, 0, 0)

>>> datetime.datetime(2011, 2, 29)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: day is out of range for month

>>> datetime.datetime(1600, 2, 29)
datetime.datetime(1600, 2, 29, 0, 0)

datetime.timedelta()2 つの日付の差を表すために使用されます

>>> datetime.datetime(2011, 2, 28) + datetime.timedelta(days=10)
datetime.datetime(2011, 3, 10, 0, 0)

>>> datetime.datetime(1600, 2, 28) + datetime.timedelta(days=10)
datetime.datetime(1600, 3, 9, 0, 0)

>>> datetime.datetime(2011, 2, 28) - datetime.datetime(2011, 4, 10)
datetime.timedelta(-41)

これがあなたのコードにどのように適合するかはわかりませんが、オプションかもしれません;-)

于 2011-03-15T23:13:17.993 に答える
5

次のことを確認している場合:calendar.isleap()month == 2 and day == 29を使用してうるう年かどうかも確認するのは冗長です。うるう年以外の2月29日に設定された場合、 /はaを上げます。datedatetimeValueError

于 2011-11-21T23:19:59.157 に答える