检测变量是否是日期时间对象

Rya*_*axe 25 python datetime

我有一个变量,我需要知道它是否是一个日期时间对象.

到目前为止,我一直在使用函数中的以下hack来检测datetime对象:

if 'datetime.datetime' in str(type(variable)):
     print('yes')
Run Code Online (Sandbox Code Playgroud)

但是确实应该有一种方法可以检测出什么类型的物体.就像我能做的那样:

if type(variable) is str: print 'yes'
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点,除了将对象类型的名称转换为字符串并查看字符串是否包含'datetime.datetime'

Ric*_*dle 72

你需要isinstance(variable, datetime.datetime):

>>> import datetime
>>> now = datetime.datetime.now()
>>> isinstance(now, datetime.datetime)
True
Run Code Online (Sandbox Code Playgroud)

更新

正如达沃斯所注意到的那样,它datetime.datetime是一个子类datetime.date,这意味着以下内容也可以起作用:

>>> isinstance(now, datetime.date)
True
Run Code Online (Sandbox Code Playgroud)

也许最好的方法就是测试类型(如达沃斯所建议的那样):

>>> type(now) is datetime.date
False
>>> type(now) is datetime.datetime
True
Run Code Online (Sandbox Code Playgroud)

熊猫 Timestamp

一条评论提到在python3.7中,这个答案中的原始解决方案返回False(它在python3.4中工作正常).在这种情况下,根据达沃斯的评论,你可以做到以下几点:

>>> type(now) is pandas.Timestamp
Run Code Online (Sandbox Code Playgroud)

如果要检查项目是否为datetime.datetimeOR 类型pandas.Timestamp,请检查两者

>>> (type(now) is datetime.datetime) or (type(now) is pandas.Timestamp)
Run Code Online (Sandbox Code Playgroud)

  • 对于其他人来说,这通常应该是最好的,因为它比 `type(variable) == datetime.datetime` 更灵活,并且还会为 `pandas` 时间戳对象和可能的其他时间戳格式产生 `True`。 (2认同)

kor*_*nce 9

使用isinstance.

if isinstance(variable,datetime.datetime):
    print "Yay!"
Run Code Online (Sandbox Code Playgroud)


Art*_*yan 6

请注意,datetime.date对象不被视为具有datetime.datetime类型,而datetime.datetime对象则被视为具有datetime.date类型。

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
Run Code Online (Sandbox Code Playgroud)


Sau*_*mar 5

我相信上述所有答案仅在日期类型为 datetime.datetime 时才有效。如果日期对象的类型为 datetime.time 或 datetime.date 怎么办?

这就是我找到日期时间对象的方法。它总是对我有用。(Python2 和 Python3):

import datetime
type(date_obj) in (datetime, datetime.date, datetime.datetime, datetime.time)
Run Code Online (Sandbox Code Playgroud)

在 Python2 或 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
Run Code Online (Sandbox Code Playgroud)