日期时间 class 和模块不能一起工作?

Datetime class and module can't work together?

我想了解为什么模块和 class“datetime”不能一起工作。在下面的代码中,我有 3 个选择:

  1. 否则date.today不起作用
  2. 否则 strptime 不起作用
  3. 否则它们不能一起工作:“TypeError:- 不支持的操作数类型: 'datetime.datetime' 和 'datetime.date'
import datetime

film_name = input("What is the movie name ?")

Date = input("When it's up ?")
date_format = "%d/%m/%y"

d1 = datetime.datetime.strptime(Date, date_format)
d0 = datetime.date.today()
print(d0,d1)

delta = d1 - d0

print("Il reste {} dodos avant la sortie de {}".format(delta, film_name))

我尝试了很多方法,比如创建一些函数,然后是 class,但没有任何效果。如果有人可以向我解释原因或给我另一种方法来做到这一点?

感谢您的帮助,抱歉我的英语不是母语。如果你有任何问题,我在这里

#Edit :按照下面的建议,我试过了: ''' 导入“从日期时间导入日期” d0 = datetime.combine(date.today(), datetime.min.time()) '''

答案是:AttributeError: 模块 'datetime' 没有属性 'combine'

#Edit_2 :如果我使用: ''' d0 = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time()) ''' 它几乎可以工作,我得到了:

我还剩 304 天了,0:00:00 dodos avant la sortie de Avatar

但我还能看到时间?

#Edit3

如果您需要相关建议,请查看评论。那么正确答案是:


import datetime

film_name = input("What is the movie name ?")

Date = input("When it's up ?")
date_format = "%d/%m/%y"

d1 = datetime.datetime.strptime(Date, date_format)
d0 = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time())

d2 = (d1 - d0).days

print("Il reste {} dodos avant la sortie de {}".format(d2, film_name))

datetime.date 是一个日期 - 例如,当我写这篇文章时,它是 2021 年 7 月 5 日。 datetime.datetime 是日期的特定时间 - 例如 14:04 2021 年 7 月 5 日。

您不能从 datetime 中减去 date,那样的话它们没有可比性。您可以在它们之间进行转换,例如使用 datetime.combine()datetime 创建 datetime 或使用 date() 实例方法从 datetimedate。如果您想继续使用 strptime 来解析您的输入而不是切换到 fromisoformat() or using a third party library like dateutil.

,后者可能是最简单的选择

您使用 combine() 编辑的尝试按预期工作。您已将输入日期修改为 datetime 实例,因此当您减去时会得到 timedeltatimedeltas 包含比天数更精确的精度 - 无论您是从输入创建 datetime.date() 实例还是使用 combine() 将当前日期转换为 datetime(),您都会看到类似的内容.您可以使用 days 字段获取 timedelta 中的天数,丢弃 hours/minutes.

您可以像这样从日期时间模块导入 类

from datetime import date, datetime

# ...

d1 = datetime.strptime(Date, date_format)
d0 = datetime.combine(date.today(), datetime.min.time())

或者使用模块本身

import datetime

# ...

d1 = datetime.datetime.strptime(Date, date_format)
d0 = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time())

请参考这里的回答: