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()用于表示两个日期之间的差异

>>> 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 /将提高 a 。datedatetimeValueError

于 2011-11-21T23:19:59.157 回答