如何解决“datetime.datetime”没有“timedelta”属性的问题?

31

我该如何在Python中解决这个问题。这是我的代码:

    import time
    import datetime
    from time import mktime
    from datetime import datetime

    date = '20120814174530'
    date_to_strp = time.strptime(date, '%Y%m%d%H%M%S') #convert the value of date into strptime
    date_final = datetime.fromtimestamp(mktime(date_to_strp))
    #convert date_to_strp so so i can use it to subtract a value from a timedelta later

    date_substracted = date_final - datetime.timedelta(hours = 36)

这里出现了一个错误:

类型对象'datetime.datetime'没有属性'timedelta'

尽管我使用了import datetime,但我认为它被from datetime import datetime覆盖了,但当我改变了import datetimefrom datetime import datetime的位置时,错误变成了:

'module'对象没有属性'fromtimestamp'

我可以用以下代码修复这两个错误:

    import time
    from time import mktime
    from datetime import datetime

    date = '20120814174530'
    date_to_strp = time.strptime(date, '%Y%m%d%H%M%S')
    date_final = datetime.fromtimestamp(mktime(date_to_strp))

    import datetime

    date_substracted = date_final - datetime.timedelta(hours = 36)

现在,这段代码可以正常运行,但我希望将所有的导入语句放到顶部,作为良好的编程习惯,请问有什么建议可以做到这一点而不会出现错误,或者有没有其他的编写方式推荐。

3个回答

47

要么使用 datetime.datetime.fromtimestamp,要么将导入更改为 from datetime import datetime as dt 并使用 dt.fromtimestamp


非常感谢@ecatmur,我不太熟悉Python,所以不知道可以在导入部分使用别名...再次感谢。 - obutsu
4
如果这个答案帮助您解决了问题,您应该将其标记为被接受的答案,而不仅仅是表达感谢。 - Coral Doe

11
我想你应该单独导入timedelta,像这样:

我觉得您应该像这样单独导入timedelta。

from datetime import datetime as dt, timedelta

然后,您可以调用。
dt.fromtimestamp(mktime(date_to_strp))

and

timedelta(hours = 36)

9

不要使用直接导入的方式,例如:

import decimal
import datetime

这将会导致:

datetime.datetime.today()
decimal.Decimal()

考虑以下内容:

from datetime import datetime
from decimal import Decimal
print datetime.now()
print Decimal("1")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接