Answer a question

I have a variable and I need to know if it is a datetime object.

So far I have been using the following hack in the function to detect datetime object:

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

But there really should be a way to detect what type of object something is. Just like I can do:

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

Is there a way to do this other than the hack of turning the name of the object type into a string and seeing if the string contains 'datetime.datetime'?

Answers

You need isinstance(variable, datetime.datetime):

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

Update

As noticed by Davos, datetime.datetime is a subclass of datetime.date, which means that the following would also work:

>>> isinstance(now, datetime.date)
True

Perhaps the best approach would be just testing the type (as suggested by Davos):

>>> type(now) is datetime.date
False
>>> type(now) is datetime.datetime
True

Pandas Timestamp

One comment mentioned that in python3.7, that the original solution in this answer returns False (it works fine in python3.4). In that case, following Davos's comments, you could do following:

>>> type(now) is pandas.Timestamp

If you wanted to check whether an item was of type datetime.datetime OR pandas.Timestamp, just check for both

>>> (type(now) is datetime.datetime) or (type(now) is pandas.Timestamp)
Logo

Python社区为您提供最前沿的新闻资讯和知识内容

更多推荐