简体   繁体   English

如何整理出一个object是datetime还是python中的date?

[英]How can I sort out an object is datetime or date in python?

I am trying to develop a logic that depends on the type of the input being date or datetime.我正在尝试开发一种逻辑,该逻辑取决于输入类型是日期还是日期时间。 To achieve this goal, I used isinstance with datetime.date and datetime.datetime .为实现此目标,我将isinstancedatetime.datedatetime.datetime一起使用。 Unfortunately, it seems like that a datetime.datetime object is considered an instance of datetime.date .不幸的是,似乎datetime.datetime object 被认为是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

I suspected that datetime.date might be considered a subclass of datetime.datetime but that's not the case:我怀疑datetime.date可能被视为datetime.datetime的子类,但事实并非如此:

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

What's the pythonic way of figureing out whether an object is a date or a datetime?确定 object 是日期还是日期时间的 pythonic 方法是什么?

PS I checked this related question , but that doesn't resolve my issue. PS 我检查了这个相关问题,但这并没有解决我的问题。

You can retrieve the exact type of the objects with type , and check whether it's date or datetime using is :您可以使用 type 检索对象的确切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

Note that type objects are unique , so comparing them using is is well defined.请注意,类型对象是唯一的,因此使用is比较它们是明确定义的。

You can check first for the wider type, then the other:您可以先检查更宽的类型,然后再检查其他类型:

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

Because every datetime.datetime object is also a datetime.date object, but the reverse is not generally true.因为每一个datetime.datetime object也是一个datetime.date object,但是反过来一般不成立。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM