You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断Python中的datetime对象是date类型还是datetime类型?

解决区分date和datetime对象并格式化的问题

嘿,我完全懂你现在的困惑!其实问题主要出在两个关键地方:一个是方法名拼写错误,另一个是类型判断的顺序逻辑。咱们一步步拆解解决:

1. 先修正最致命的拼写错误

你所有代码里的strfttime都写错了!正确的方法名是strftime(少了一个e)——不管是datetime.date还是datetime.datetime对象,都只有strftime方法,没有strfttime,这就是为什么你一直收到“对象没有该属性”的报错。

2. 理顺类型判断的逻辑

问题根源:datetime是date的子类

datetime.datetime类是继承自datetime.date的,所以当你用isinstance(dtDate, datetime.date)判断时,datetime对象也会返回True,这就是为什么你之前的代码总是触发第一个条件。

解决方案:先判断更具体的类型

正确的做法是先检查是否是datetime.datetime(更具体的子类),再检查是否是datetime.date(父类),代码示例:

import datetime

dtDate = datetime.date.today()  # 换成datetime.datetime.now()也能正常工作
if isinstance(dtDate, datetime.datetime):
    # 如果是datetime对象,格式化包含时间的字符串
    sDate = dtDate.strftime('%x %X')
elif isinstance(dtDate, datetime.date):
    # 如果是纯date对象,只格式化日期
    sDate = dtDate.strftime('%x')

另外两种可行的写法

写法一:用type()精确匹配类型

如果你想严格匹配类型(不考虑子类继承关系),可以用type()判断,注意要写全类名:

import datetime

dtDate = datetime.date.today()
if type(dtDate) is datetime.date:
    sDate = dtDate.strftime('%x')
elif type(dtDate) is datetime.datetime:
    sDate = dtDate.strftime('%x %X')

写法二:用try/except捕获属性错误

这种方式不需要显式判断类型,直接尝试访问datetime特有的属性,失败则判定为date对象:

import datetime

dtDate = datetime.date.today()
try:
    # 尝试访问hour属性,datetime对象有这个属性,date对象没有
    dtDate.hour
    sDate = dtDate.strftime('%x %X')
except AttributeError:
    sDate = dtDate.strftime('%x')

最后总结

把strfttime改成strftime,再调整类型判断的顺序(或者用其他两种写法),你的代码就能正常区分date和datetime对象并正确格式化了。

内容的提问来源于stack exchange,提问作者twjolson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:42:30