Python:如何检查对象是否为datetime.date类型?

我尝试了一些明显的选择,但没有一个起作用:

In [150]: x
Out[150]: datetime.date(2012, 9, 1)

In [151]: type(x)
Out[151]: datetime.date

In [152]: isinstance(x, datetime.date)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-152-9a298ea6fce5> in <module>()
----> 1 isinstance(x, datetime.date)

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

In [153]: x is datetime.date
Out[153]: False

In [154]: type(x) is datetime.date
Out[154]: False

正确的做法是什么?

asked 2020-02-13T19:54:09Z
6个解决方案
90 votes

我相信它在您的示例中不起作用的原因是您已导入datetime,如下所示:

from datetime import datetime

这导致您看到的错误

In [30]: isinstance(x, datetime.date)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/<ipython-input-30-9a298ea6fce5> in <module>()
----> 1 isinstance(x, datetime.date)

TypeError: isinstance() arg 2 must be a class, type, or tuple of classes and types

如果您只是这样导入:

import datetime

该代码将按照所有其他答案所示的方式运行

In [31]: import datetime

In [32]: isinstance(x, datetime.date)
Out[32]: True

In [33]: 
olly_uk answered 2020-02-13T19:54:36Z
9 votes

正确的方法是

import datetime
isinstance(x, datetime.date)

当我在机器上尝试此程序时,它可以正常工作。 您需要研究为什么datetime.date不是类。 您可能还用其他东西掩盖了吗? 或在导入时未正确引用它?

cmd answered 2020-02-13T19:55:00Z
4 votes
import datetime
d = datetime.date(2012, 9, 1)
print type(d) is datetime.date

> True
Simon Steinberger answered 2020-02-13T19:55:16Z
3 votes

根据文档,类date是类datetime的父级。isinstance()方法将在所有情况下为您提供True。 如果需要将datetimedate区别开来,则应检查类的名称。

import datetime

datetime.datetime.now().__class__.__name__ == 'date' #False
datetime.datetime.now().__class__.__name__ == 'datetime' #True
datetime.date.today().__class__.__name__ == 'date' #True
datetime.date.today().__class__.__name__ == 'datetime' #False

当我对日期和日期与时间有不同的格式设置规则时,就遇到了这个问题

Roman Kazakov answered 2020-02-13T19:55:40Z
2 votes

如果您现有的代码已经依赖from datetime import datetime,则还可以直接导入date

from datetime import datetime, timedelta, date
print isinstance(datetime.today().date(), date)
Dmitry B. answered 2020-02-13T19:56:00Z
2 votes

在Python 3.5中,isinstance(x, date)对我有效:

>>> from datetime import date
>>> x = date(2012, 9, 1)
>>> type(x)
<class 'datetime.date'>
>>> isinstance(x, date)
True
>>> type(x) is date
True
fedorqui answered 2020-02-13T19:56:22Z
translate from https://stackoverflow.com:/questions/16151402/python-how-can-i-check-whether-an-object-is-of-type-datetime-date