在Python中处理闰年

5 投票
2 回答
21919 浏览
提问于 2025-04-16 13:46

我有一个程序,用户输入一个日期,然后这个程序会把这个日期和另一个日期进行比较,看看哪个日期更早。

我该怎么写代码,让用户输入2月29日时,程序返回2月28日呢?因为那年不是闰年,所以2月29日并不存在。

举个例子:

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"

2 个回答

6

如果你在检查:month == 2 and day == 29,那么再去检查是不是闰年就多余了。因为如果你试图在一个不是闰年的年份里设置日期为2月29日,datedatetime会直接报错,提示你这个日期是无效的。

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)

我不知道这在你的代码中怎么用,但这可能是一个选择哦;-)

撰写回答