我如何比较Python中的date和date时间?

这是我想要执行的一小段代码:

>>> from datetime import * >>> item_date = datetime.strptime('7/16/10', "%m/%d/%y") >>> from_date = date.today()-timedelta(days=3) >>> print type(item_date) <type 'datetime.datetime'> >>> print type(from_date) <type 'datetime.date'> >>> if item_date > from_date: ... print 'item is newer' ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't compare datetime.datetime to datetime.date 

我似乎无法比较date和date时间值。 什么是比较这些最好的方法? 我应该将date时间转换为date还是反之? 我如何转换他们之间。

(一个小问题,但似乎有点混乱。)

使用.date()方法将date时间转换为date:

 if item_date.date() > from_date: 

或者,您可以使用datetime.today()而不是date.today() 。 你可以使用

 from_date = from_date.replace(hour=0, minute=0, second=0, microsecond=0) 

以后消除时间部分。

我想比较date,如string格式,如“20110930”

 benchMark = datetime.datetime.strptime('20110701', "%Y%m%d") actualDate = datetime.datetime.strptime('20110930', "%Y%m%d") if actualDate.date() < benchMark.date(): print True 

这里是另一个采取,从注释“偷” 不能比较datetime.datetime到datetime.date …使用此构造将date转换为date时间:

 datetime.datetime(d.year, d.month, d.day) 

build议:

 from datetime import datetime def ensure_datetime(d): """ Takes a date or a datetime as input, outputs a datetime """ if isinstance(d, datetime): return d return datetime.datetime(d.year, d.month, d.day) def datetime_cmp(d1, d2): """ Compares two timestamps. Tolerates dates. """ return cmp(ensure_datetime(d1), ensure_datetime(d2)) 

在我的情况下,我得到两个对象,我不知道它是date还是timedate对象。 转换为date不会很好,因为我会丢弃信息 – 具有相同date的两个timedate对象应该正确sorting。 我可以在同一date的date时间之前对date进行sorting。

我想我会比较之前使用strftime:

 >>> foo=datetime.date(2015,1,10) >>> bar=datetime.datetime(2015,2,11,15,00) >>> foo.strftime('%F%H%M%S') > bar.strftime('%F%H%M%S') False >>> foo.strftime('%F%H%M%S') < bar.strftime('%F%H%M%S') True 

不是优雅,但应该解决。 我认为如果Python不会提高错误会更好,我没有看到为什么date时间不应该与date相比较的原因。 这种行为在python2和python3中是一致的。