如何检查变量是否是datetime.datetime或datetime.date的实例
我试过这个
In [16]: import datetime
In [17]: now = datetime.datetime.utcnow()
In [18]: isinstance(now, datetime.date)
Out[18]: True
In [19]: isinstance(now, datetime.datetime)
Out[19]: True
我原本期待第一个 isinstance 应该返回 False。那发生了什么呢?
2 个回答
0
你可以使用下面的任意一种方法:
你可以用任何随机的日期来比较日期和日期时间的实例。
第一种方法:
a = datetime.date(2021,12,30)
x = datetime.datetime(2020, 5, 17)
print(isinstance(a,type(datetime.date(2021,12,30)))) #True
print(isinstance(a,type(datetime.datetime(2021,12,30)))) #False
第二种方法:
a = datetime.date(2021,12,30)
x = datetime.datetime(2020, 5, 17)
print(isinstance(a, a.__class__)) # True
print(isinstance(a, x.__class__)) # False
16
因为 datetime
是从 date
继承来的,所以每一个 datetime
的实例也可以看作是一个 date
的实例。换句话说,你可以在需要 date
的地方使用 datetime
的实例。这是面向对象编程中的一个重要概念。
如果你想修改检查的方式来满足你的需求,可以通过 type(now) is datetime.date
来专门测试是否是 date
。或者,你也可以用 isinstance(now, datetime.date) and not isinstance(now, datetime.datetime)
来明确排除 datetime
。