我一直在尝试使用日期时间获取今天的年、月和日。因此,我使用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 模块。
strftime是datetime 对象的方法(即在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)
希望这可以为您解决问题。
您的错误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)