Detect if a variable is a datetime object

后端 未结 7 1337
情深已故
情深已故 2021-02-02 05:31

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:

i         


        
相关标签:
7条回答
  • 2021-02-02 06:08

    You can also check using duck typing (as suggested by James).

    Here is an example:

    from datetime import date, datetime
    
    def is_datetime(dt):
        """
        Returns True if is datetime
        Returns False if is date
        Returns None if it is neither of these things
        """
        try:
            dt.date()
            return True
        except:
            if isinstance(dt, date):
                return False
        return None
    
    

    Results:

    In [8]: dt = date.today()
    In [9]: tm = datetime.now()
    In [10]: is_datetime(dt)
    Out[11]: False
    In [12]: is_datetime(tm)
    Out[13]: True
    In [14]: is_datetime("sdf")
    In [15]:
    
    0 讨论(0)
  • 2021-02-02 06:12

    isinstance is your friend

    >>> thing = "foo"
    >>> isinstance(thing, str)
    True
    
    0 讨论(0)
  • 2021-02-02 06:15

    Note, that datetime.date objects aer not considered to be of datetime.datetime type, while datetime.datetime objects are considered to be of datetime.date type.

    import datetime                                                                                                                     
    
    today = datetime.date.today()                                                                                                       
    now = datetime.datetime.now()                                                                                                       
    
    isinstance(today, datetime.datetime)                                                                                                
    >>> False
    
    isinstance(now, datetime.datetime)                                                                                                  
    >>> True
    
    isinstance(now, datetime.date)                                                                                                      
    >>> True
    
    isinstance(now, datetime.datetime)                                                                                                  
    >>> True
    
    0 讨论(0)
  • 2021-02-02 06:23

    I believe all the above answer will work only if date is of type datetime.datetime. What if the date object is of type datetime.time or datetime.date?

    This is how I find a datetime object. It always worked for me. (Python2 & Python3):

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

    Testing in Python2 or 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
    
    0 讨论(0)
  • 2021-02-02 06:24

    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)
    
    0 讨论(0)
  • 2021-02-02 06:25

    Use isinstance.

    if isinstance(variable,datetime.datetime):
        print "Yay!"
    
    0 讨论(0)
提交回复
热议问题