我有一个变量,我需要知道它是否是一个日期时间对象.
到目前为止,我一直在使用函数中的以下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)
使用isinstance.
if isinstance(variable,datetime.datetime):
print "Yay!"
Run Code Online (Sandbox Code Playgroud)
请注意,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)
我相信上述所有答案仅在日期类型为 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)
| 归档时间: |
|
| 查看次数: |
42067 次 |
| 最近记录: |