首页 > 解决方案 > Python datetime 模块和获取当前时间

问题描述

我是 Python 的初学者,我想做一个简单的项目来说明离圣诞节还有多少时间。首先,我对当前时间有疑问:

import datetime
now = datetime.now()
print(now)`

错误说module 'datetime' has no attribute 'now'

比我通过做来修复它,from datetime import datetime 但比日期的计算产生了一个错误代码:

from datetime import datetime
xmas = datetime.date(2020, 12, 25) - datetime.date.today()
now = datetime.now()
print(now)

错误是:Exception has occurred: TypeError descriptor 'date' requires a 'datetime.datetime' object but received a 'int'
请帮助我。
祝你今天过得愉快!

标签: pythondatetime

解决方案


该类datetime的导入有点令人困惑,因为它位于一个也称为datetime. 当你这样做时,from datetime import datetime你正在将 datetime导入当前范围并且可以只做datetime.now(). 如果你只是import datetime在导入模块 datetime,那么类就是datetime.datetime,制作now方法datetime.datetime.now()。清如泥?:)

更令人困惑的是,datetime模块有一个date类,而datetime类有一个date方法。您在代码中将两者混合在一起,当您打算构造一个对象时调用该类的date方法。既然你这样做了,你根本就没有导入这个类。datetimedatefrom datetime import datetimedatetime.date

无论如何,这里是如何解决它:

import datetime

xmas = datetime.date(2020, 12, 25) - datetime.date.today()
now = datetime.datetime.now()
print(now)

请注意,在此代码中,xmas是一个datetime.timedelta对象,并且now是一个datetime.datetime对象。

你也可以这样做:

from datetime import date, datetime

xmas = date(2020, 12, 25) - date.today()
now = datetime.now()
print(now)

希望并排查看这两个示例有助于阐明模块与类的关系。这全都与不同级别的间接有关——在第一个示例中,import语句引入了整个模块,并且您的代码需要指定要从中提取哪些类。在第二个示例中,该from ... import语句将这两个类作为导入的一部分从模块中拉出,因此代码可以通过这些名称直接访问它们。由于名称都非常相似,因此除非您真正了解 import 语句的确切作用,否则您不能依靠名称来知道您正在访问什么样的东西。


推荐阅读