如何比较Python中的日期和日期时间?
这里,我试图执行一个小片段:如何比较Python中的日期和日期时间?
>>> 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
我似乎无法比拟的日期和日期时间值。什么是比较这些最好的方法?我应该将日期时间转换为日期还是反之?我如何在它们之间进行转换。
(一个小问题,但它似乎有点混乱。)
使用the .date()
method为datetime转换为日期:
if item_date.date() > from_date:
或者,你可以使用datetime.today()
,而不是date.today()
。您可以使用
from_date = from_date.replace(hour=0, minute=0, second=0, microsecond=0)
消除时间部分之后。
我认为这是最好的答案,如果它给出item_date将始终是一个日期时间和from_date将永远是一个约会。我在这里登陆是因为我想对包含日期和日期时间的列表进行排序。就我而言,上面的方法可能是最糟糕的。 – tobixen 2015-04-24 10:17:40
我想比较日期这是在字符串格式像“20110930”
benchMark = datetime.datetime.strptime('20110701', "%Y%m%d")
actualDate = datetime.datetime.strptime('20110930', "%Y%m%d")
if actualDate.date() < benchMark.date():
print True
如果你有字符串格式YYYYMMDD字符串比较相当于转换为日期和比较日期,并且效率更高。 – omikron 2014-03-10 09:59:02
在我的情况,我得到了两个对象,我不知道这是否是日期或时间日期对象。转换为日期不会很好,因为我会丢弃信息 - 具有相同日期的两个timedate对象应该正确排序。对于在相同日期的日期时间之前对日期进行排序,我很确定。
我想我会在比较之前使用的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不会提高错误会更好,我没有看到为什么日期时间不应该与日期相比的原因。这种行为在python2和python3中是一致的。
这里是另一个拿在can't compare datetime.datetime to datetime.date“偷”从评论...使用此构造日期转换为datetime:
datetime.datetime(d.year, d.month, d.day)
建议:
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))
这似乎是一个重复的http://*.com/questions/7239315/cant-compare-datetime-datetime-to-datetime-date – tobixen 2015-04-24 06:03:34