python - 确定 datetime 对象是 date 还是 datetime
问题描述
我正在尝试格式化日期时间对象,并编写了一个小函数来确定日期时间对象是日期还是日期时间对象。但是,我没有尝试过任何工作。
使用 datetime.date.today() 和 datetime.datetime.now() 生成日期和日期时间并将其分配给 dtDate。
我的第一次尝试是 isinstance() :
dtDate = datetime.date.today()
# dtDate = datetime.datetime.now()
if isinstance(dtDate, date) :
sDate = dtDate.strftime('%x')
elif isinstance(dtDate, datetime) :
sDate = dtDate.strfttime('%x %X')
但无论它是日期还是日期时间都会触发。如果我更具体,比如“datetime.date”说“arg 2 必须是类型或元组”。
我还尝试检测对象是否具有小时字段:
if dtDate.hour :
sDate = dtDate.strftime('%x %X')
else :
sDate = dtDate.strfttime('%x')
但是,如果对象纯粹是一个没有小时属性的日期,那就太可怕了。
即使是 try/except 块也有问题:
try :
if dtDate.hour :
sDate = dtDate.strftime('%x %X')
except :
sDate = dtDate.strfttime('%x')
这将返回 'datetime.date' 对象没有日期对象的属性 'strfttime'。
最后,我尝试比较类型:
if type(dtDate) is datetime.date :
sDate = dtDate.strftime('%x')
else :
sDate = dtDate.strfttime('%x %X')
正确返回日期,但不是日期时间对象(返回 'datetime.datetime' 对象没有属性 'strfttime')
对不起,大脑转储,但我完全没有想法。
解决方案
如果您查看datetime
该类的源代码(或简单地在 Mac 上使用 IDE 命令并单击datetime
),您会注意到datetime
该类实际上是以下的子类date
:
class datetime(date):
...
因此,isinstance(dtDate, date)
即使dtDate
是一个datetime
对象也会是真的。
您可以通过首先检查更具体的类型来解决此问题:
if isinstance(dtDate, datetime):
sDate = dtDate.strftime('%x %X')
elif isinstance(dtDate, date):
sDate = dtDate.strftime('%x')
完整代码:
from datetime import date, datetime
# dtDate = date.today()
dtDate = datetime.now()
if isinstance(dtDate, datetime):
sDate = dtDate.strftime('%x %X')
elif isinstance(dtDate, date):
sDate = dtDate.strftime('%x')
print(sDate)
推荐阅读
- spring - Spring MVC:日期未以正确的 json 格式显示
- sql - Oracle Live SQL 中的错误 -> ORA-00918:列定义不明确
- c++ - 在 c++ 中我有 2 个结构并希望传递给同一个函数
- javascript - 使用两个或多个数据源在同一个图表上渲染多个 fusioncharts 图
- flurry - Flurry Analytics 事件没有被记录
- postgresql - 是否可以使用 count 和 group by 获取查询的百分比值?
- r - 错误:在 R 中使用 goProfiles 包时,无法将类型“环境”强制转换为“字符”类型的向量
- html - 如何在带有深色主题的android上更改chrome中状态栏的颜色?
- mql5 - 如何将指标的多个值编码到新的自定义指标中?(MQL5)
- python - YouTube Reporting API 检索外部流量来源