在python中如何区分对象是datetime还是date?

xuo3flqw  于 2023-01-18  发布在  Python
关注(0)|答案(2)|浏览(188)

我试图开发一个依赖于输入类型date或datetime的逻辑,为了实现这个目标,我将isinstancedatetime.datedatetime.datetime一起使用,不幸的是,datetime.datetime对象似乎被认为是datetime.date的示例。

import datetime

date_obj = datetime.date.today()
datetime_obj = datetime.datetime.now()

type(date_obj)
# <class 'datetime.date'>

type(datetime_obj)
# <class 'datetime.datetime'>

isinstance(date_obj, datetime.date)
# True
isinstance(datetime_obj, datetime.date)
# True

isinstance(date_obj, datetime.datetime)
# False
isinstance(datetime_obj, datetime.date)
# True

我怀疑datetime.date可能被认为是datetime.datetime的子类,但事实并非如此:

issubclass(datetime.date, datetime.datetime)
# False
issubclass(datetime.datetime, datetime.date)
# True

判断一个对象是日期还是日期时间的Python方法是什么?
P.S.我检查了this related question,但这并没有解决我的问题。

ca1c2owp

ca1c2owp1#

可以使用type检索对象的确切类型,并使用is检查它是date还是datetime

>>> type(date_obj) is datetime.date
True
>>> type(date_obj) is datetime.datetime
False

>>> type(datetime_obj) is datetime.date
False
>>> type(datetime_obj) is datetime.datetime
True

注意type objects are unique,因此使用is比较它们是很好定义的。

ui7jx7zq

ui7jx7zq2#

您可以先检查较宽的类型,然后再检查其他类型:

if isinstance(obj, datetime.date):
    # it's a date, not a datetime
    ...
elif isinstance(obj, datetime.datetime):
    # it's a datetime, not a date
    ...

因为每个datetime.date时间对象也是一个datetime.date对象,但反过来通常不成立。

相关问题