2013-06-07 12 views
13

Ho una variabile e ho bisogno di sapere se si tratta di un oggetto datetime.Rileva se una variabile è un oggetto datetime

Finora ho usato il seguente trucco nella funzione di rilevare oggetti datetime:

if 'datetime.datetime' in str(type(variable)): 
    print('yes') 

Ma ci realmente dovrebbe essere un modo per rilevare che tipo di oggetto è qualcosa. Proprio come posso fare:

if type(variable) is str: print 'yes' 

C'è un modo per fare questo tranne l'hack di trasformare il nome del tipo di oggetto in una stringa e vedere se la stringa contiene 'datetime.datetime'?

+0

Eh? Non è esattamente ciò che è per 'isinstance()'? – Celada

+0

Perché vuoi farlo? – Daenyth

+0

@Daenyth ci sono spesso validi motivi per cui la digitazione anatra non funziona in una situazione o in un'altra. Ma confrontando la rappresentazione della stringa del nome del tipo come sta facendo l'OP? Non può essere giusto! – Celada

risposta

33

È necessario isinstance(variable, datetime.datetime):

>>> import datetime 
>>> now = datetime.datetime.now() 
>>> isinstance(now, datetime.datetime) 
True 
+1

Non per gli altri, questo dovrebbe essere generalmente il migliore dato che è più flessibile di 'type (variable) == datetime.datetime' e produrrà anche' True' per gli oggetti di timestamp di 'pandas' e presumibilmente altri formati di timestamp. – ryanjdillon

6

Usa isinstance.

if isinstance(variable,datetime.datetime): 
    print "Yay!" 
3

isinstance è tuo amico

>>> thing = "foo" 
>>> isinstance(thing, str) 
True 
+1

buon lavoro ragazzi. buon lavoro. – TehTris

2

Durante l'utilizzo isinstance farà ciò che si vuole, non è molto 'divinatorio', nel senso che è meglio chiedere il perdono che il permesso.

try: 
    do_something_small_with_object() #Part of the code that may raise an 
            #exception if its the wrong object 
except StandardError: 
    handle_case() 

else: 
    do_everything_else() 
0

Credo che tutte le risposte di cui sopra funzioneranno solo se la data è di tipo datetime.datetime. Cosa succede se l'oggetto data è di tipo datetime.time o datetime.date?

Ecco come trovo un oggetto datetime. Ha sempre funzionato per me. (Python2 & python3):

import datetime 
type(date_obj) in (datetime, datetime.date, datetime.datetime, datetime.time) 

test in python2 o python3 shell:

import datetime 
d = datetime.datetime.now() # creating a datetime.datetime object. 
date = d.date() # type(date): datetime.date 
time = d.time() # type(time): datetime.time 

type(d) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
type(date) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
type(time) in (datetime, datetime.date, datetime.datetime, datetime.time) 
True 
Problemi correlati