Подтвердить что ты не робот

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

Каков правильный способ сделать это?

4b9b3361

Ответ 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

Я столкнулся с этой проблемой, когда у меня разные правила форматирования даты и даты со временем