How can I compare a date and a datetime in Python?
下面是我尝试执行的一个小片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 | >>> 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 |
我似乎无法比较日期和日期时间值。最好的比较方法是什么?我应该将日期时间转换为日期,还是反之亦然?我如何在它们之间转换呢?
(一个小问题,但似乎有点困惑。)
使用
1 | if item_date.date() > from_date: |
或者,您可以使用
1 | from_date = from_date.replace(hour=0, minute=0, second=0, microsecond=0) |
号
取消时间部分。
我正在尝试比较字符串格式的日期,如"20110930"
1 2 3 4 5 6 | benchMark = datetime.datetime.strptime('20110701',"%Y%m%d") actualDate = datetime.datetime.strptime('20110930',"%Y%m%d") if actualDate.date() < benchMark.date(): print True |
这是另一个"失窃"的观点,来自"can't compare datetime.datetime to datetime.date…"使用此构造将日期转换为日期时间:
1 | datetime.datetime(d.year, d.month, d.day) |
建议:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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)) |
。
在我的例子中,我有两个对象,我不知道它是日期对象还是时间对象。转换为日期不会像我删除信息那样好-两个日期相同的TimeDate对象应该正确排序。我同意在日期时间之前排序的日期与相同的日期。
我想在比较之前我会使用strftime:
1 2 3 4 5 6 | >>> 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不提出错误的话会更好,我看不出任何理由为什么datetime不能与日期进行比较。这种行为在python2和python3中是一致的。