AttributeError: 模块“datetime”没有属性“strftime”

Spi*_*lio 7 python

我一直在尝试使用日期时间获取今天的年、月和日。因此,我使用import datetime. 但是,我还需要 timedelta 命令,所以我使用了from datetime import timedelta. 我也在使用 strftime,我相信它是从from datetime import datetime. 但是,我不能一次运行所有这些。

那么,如何使用带有 strftime 和 timedelta 的 datetime 模块?任何帮助表示赞赏!

zer*_*ero 24

datetime一旦您认为这datetime既是日期时间中的包名是模块名,那么使用就会变得非常混乱。

datetime 有很多不同的模块,即:

datetime 模块处理日期时间对象。

date 模块处理日期对象。

time 模块处理时间对象。

timedelta 模块处理 timedelta 对象。

在你的情况,当你说import datetime,你实际上指的是datetime 不是datetime 模块

strftimedatetime 对象的方法(即在datetime模块下)

因此,您有两种方法可以解决此问题。

如果您使用import datetime,那么您必须指定包、模块 THEN 方法,如下所示:

import datetime

today = datetime.datetime.now()
today.strftime('%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

或者更好的,更多的人类可读的方式就是导入datetime模块datetime做一个包from *package* import *module*。应用于 datetime 包,这意味着:from datetime import datetime像这样:

from datetime import datetime

today = datetime.now()
today.strftime('%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)

或者,我的首选方法是给模块一个别名(或者基本上是一个“昵称”),这样它就不会混淆(笑):

from datetime import datetime as dt
from datetime import timedelta as td

today = dt.now() # get date and time today
delta = td(days=3) #initialize delta
date_you_actually_want = today + delta # add the delta days
date_you_actually_want.strftime('%Y-%m-%d') # format it
Run Code Online (Sandbox Code Playgroud)

希望这可以为您解决问题。


Ric*_*lis 6

您的错误module 'datetime' has no attribute 'strftime'表明这不是导入的问题,而是您调用该strftime()方法的方式的问题。

strftime()是类上的一个方法datetime(令人困惑的是,它是模块的一部分datetime),因此您需要一个实例化的datetime对象来调用它。例如:

# import datetime class from the datetime module:
from datetime import datetime

# instantiate a new datetime object:
a = datetime(12, 10, 30, 11, 23, 45)

# call the strftime() method on the object:
print(a.strftime("%H:%M:%S %Z"))
# 11:23:45
Run Code Online (Sandbox Code Playgroud)