如何检查变量是否是datetime.datetime或datetime.date的实例

11 投票
2 回答
12537 浏览
提问于 2025-04-17 20:18

我试过这个

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

撰写回答