如何在Python中比较日期和日期时间?

Mri*_*lla 47 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
Run Code Online (Sandbox Code Playgroud)

我似乎无法比较日期和日期时间值.比较这些最好的方法是什么?我应该将日期时间转换为日期,反之亦然?我如何在他们之间进行转换.

(一个小问题,但似乎有点令人困惑.)

ken*_*ytm 81

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

if item_date.date() > from_date:
Run Code Online (Sandbox Code Playgroud)

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

from_date = from_date.replace(hour=0, minute=0, second=0, microsecond=0)
Run Code Online (Sandbox Code Playgroud)

以后消除时间部分.

  • 为什么需要转换?我认为python在内部使用unixtimestamp作为`date`和`datetime`。或者 `date` 是更多资源优化的,因为它只查找日期而不是时间? (2认同)

sam*_*rth 6

我想比较字符串格式的日期,如'20110930'

benchMark = datetime.datetime.strptime('20110701', "%Y%m%d") 

actualDate = datetime.datetime.strptime('20110930', "%Y%m%d")

if actualDate.date() < benchMark.date():
    print True
Run Code Online (Sandbox Code Playgroud)

  • 如果你有字符串格式YYYYMMDD字符串比较等同于转换为日期和比较日期并且更有效. (4认同)

tob*_*xen 6

这是另一个保留信息的情况,以防输入都是日期时间而不是日期,从can't Compare datetime.datetime to datetime.date的注释中“窃取” ...使用此构造将日期转换为日期时间:

datetime.datetime(d.year, d.month, d.day)
Run Code Online (Sandbox Code Playgroud)

建议:

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))
Run Code Online (Sandbox Code Playgroud)