J'ai essayé quelques options évidentes mais aucune d'entre elles ne fonctionne:
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
Quelle est la bonne façon de faire cela?
je crois que la raison pour laquelle cela ne fonctionne pas dans votre exemple est que vous avez importé datetime
comme suit:
from datetime import datetime
cela conduit à l'erreur que vous voyez
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
si vous importez simplement comme ceci:
import datetime
le code fonctionnera comme indiqué dans toutes les autres réponses
In [31]: import datetime
In [32]: isinstance(x, datetime.date)
Out[32]: True
In [33]:
la bonne façon est
import datetime
isinstance(x, datetime.date)
Lorsque j'essaie ceci sur ma machine, cela fonctionne bien. Vous devez vous demander pourquoi datetime.date
n'est pas une classe. Vous le masquez peut-être avec autre chose? ou ne le référençant pas correctement pour votre importation?
import datetime
d = datetime.date(2012, 9, 1)
print type(d) is datetime.date
> True
Si votre code existant s'appuie déjà sur from datetime import datetime
, vous pouvez également tout simplement importer date
from datetime import datetime, timedelta, date
print isinstance(datetime.today().date(), date)
En Python 3.5, isinstance(x, date)
me convient:
>>> from datetime import date
>>> x = date(2012, 9, 1)
>>> type(x)
<class 'datetime.date'>
>>> isinstance(x, date)
True
>>> type(x) is date
True
Selon documentation class date est un parent pour datetime. Et la méthode isinstance () vous donnera Vrai dans tous les cas. Si vous devez distinguer date-heure de date, vous devez vérifier le nom de la classe.
import datetime
datetime.datetime.now().__class__.__== 'date' #False
datetime.datetime.now().__class__.__== 'datetime' #True
datetime.date.today().__class__.__== 'date' #True
datetime.date.today().__class__.__== 'datetime' #False
J'ai rencontré ce problème lorsque j'ai différentes règles de formatage pour les dates et les dates avec l'heure