【问题标题】:Check if second or microsecond were provided in a datetime object检查日期时间对象中是否提供了秒或微秒
【发布时间】:2020-01-24 22:56:24
【问题描述】:

有没有办法确定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,以防万一。

【问题讨论】:

  • 我怀疑此信息是否可用。如果您担心填写缺失的信息,您应该首先自己创建对象,而不是接受预制对象。
  • 我看不到这里的逻辑:如果你有办法正确填写时间信息,你也有信息来检查对象是否包含正确的信息。在任何情况下,所有相关字段的原始输入都恰好是0 的可能性非常低,也许您可​​以抓住机会。

标签: python python-3.x datetime


【解决方案1】:

这对于datetime.datetime 实例是不可能的。正如您所注意到的,构造函数会自动使用0 填充缺失值。此外,除了构造函数之外,还有其他方法可以创建datetime.datetime 的实例。这些不同方法创建的实例之间没有有意义的区别。如果它们具有相同的潜在价值,则它们在设计上是等效且无法区分的。换句话说,datetime 模块旨在积极阻止您尝试做的事情。

如果不了解您的具体用例以及为什么需要这种行为的更多信息,就很难提出替代方案。

但是,如果您可以控制调用您的函数的代码,那么最好的办法可能是定义并接受您自己的 datetime.datetime 类,该类提供类似的构造函数,但不会用 @ 隐式替换未指定的值987654326@。你的函数的调用者必须传递你的类的实例而不是datetime.datetime。应用自定义“缺失值”逻辑后,您可以创建一个完全填充的 datetime.datetime 对象并继续。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 2022-06-13
    • 2021-10-03
    • 2015-07-20
    相关资源
    最近更新 更多