检查日期时间对象中是否提供秒或微秒

问题描述 投票:2回答:1

是否有一种方法可以确定python datetime对象是否在创建对象时包含了时间属性?特别是,我想知道是否提供了分钟,秒或微秒。

例如,以下内容:

from datetime import datetime
d = datetime(2020,1,24)
# datetime.datetime(2020, 1, 24, 0, 0)
d.microsecond
# 0

# ideally, if function "has_seconds()" did exist...
if not d.has_seconds():
     d = d.replace(second=59)

我正在使用一个接收日期时间对象的函数,我需要填写最初未提供的任何信息。但是,对于所有最初未提供的时间属性,datetime假定值为0。不幸的是,0表示小时,分钟,秒和微秒,因此我无法使用它进行检查。

如果有相关性,我正在使用Python 3.7。

python python-3.x datetime
1个回答
0
投票

datetime.datetime实例将无法实现。如您所述,构造函数会自动使用0填充缺失值。此外,除了其构造函数外,还有其他方法可以创建datetime.datetime的实例。通过这些各种方法创建的实例之间没有有意义的区别。如果它们具有相同的基础值,则从设计上看它们是等效的并且是无法区分的。换句话说,datetime模块旨在主动阻止您尝试执行的操作。

在不了解您的特定用例以及为什么需要这种行为的情况下,很难提出替代方案。

但是,如果您可以控制调用函数的代码,那么最好的选择是定义并接受自己的datetime.datetime类,该类提供类似的构造函数,但不会隐式地将未指定的值替换为[C0 ]。函数的调用者必须传递类的实例而不是0。一旦应用了自定义的“缺失值”逻辑,就可以创建一个完全填充的datetime.datetime对象并继续。

© www.soinside.com 2019 - 2024. All rights reserved.