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
Каков правильный способ сделать это?
Ответы
Ответ 1
Я считаю, что причина, по которой он не работает в вашем примере, заключается в том, что вы импортировали 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]:
Ответ 2
правильный путь
import datetime
isinstance(x, datetime.date)
Когда я пробую это на своей машине, он работает нормально. Вам нужно посмотреть, почему datetime.date
не является классом. Возможно, вы маскируете его чем-то другим? или не ссылается на него правильно для вашего импорта?
Ответ 3
import datetime
d = datetime.date(2012, 9, 1)
print type(d) is datetime.date
> True
Ответ 4
Если ваш существующий код уже полагается на from datetime import datetime
, вы также можете просто импортировать date
from datetime import datetime, timedelta, date
print isinstance(datetime.today().date(), date)
Ответ 5
В 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
Ответ 6
Согласно документации класс date
является родителем для класса datetime
. И isinstance()
даст вам True
во всех случаях. Если вам нужно отличать datetime
от date
вы должны проверить имя класса
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
Я столкнулся с этой проблемой, когда у меня разные правила форматирования даты и даты со временем