web-dev-qa-db-fra.com

Python: comment puis-je vérifier si un objet est de type datetime.date?

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?

39
user1642513

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]: 
74
olly_uk

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?

7
cmd
import datetime
d = datetime.date(2012, 9, 1)
print type(d) is datetime.date

> True
4
Simon Steinberger

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)
2
Dmitry B.

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
2
fedorqui

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

0
Roman Kazakov