【问题标题】:type object 'datetime.datetime' has no attribute 'datetime'类型对象“datetime.datetime”没有属性“datetime”
【发布时间】:2012-10-06 01:30:58
【问题描述】:

我收到以下错误:

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

在下面一行:

date = datetime.datetime(int(year), int(month), 1)

有人知道错误的原因吗?

如果有帮助,我会使用 from datetime import datetime 导入日期时间

谢谢

【问题讨论】:

    标签: python datetime namespaces


    【解决方案1】:

    Datetime 是一个允许处理日期、时间和日期时间(所有这些都是数据类型)的模块。这意味着datetime 既是顶级模块,也是该模块中的一个类型。这令人困惑。

    您的错误可能是基于模块的混乱命名,以及您或您正在使用的模块已经导入。

    >>> import datetime
    >>> datetime
    <module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'>
    >>> datetime.datetime(2001,5,1)
    datetime.datetime(2001, 5, 1, 0, 0)
    

    但是,如果你导入 datetime.datetime:

    >>> from datetime import datetime
    >>> datetime
    <type 'datetime.datetime'>
    >>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
                                    # as you imported the type, not the module
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
    >>> datetime(2001,5,1)
    datetime.datetime(2001, 5, 1, 0, 0)
    

    我怀疑您或您正在使用的模块之一已像这样导入: from datetime import datetime.

    【讨论】:

    • @Jean 这是 datetime 用它的类名之一而不是 python 的类名来隐藏它自己的模块名的错误。
    【解决方案2】:

    你应该使用

    date = datetime(int(year), int(month), 1)
    

    或者改变

    from datetime import datetime
    

    import datetime
    

    【讨论】:

      【解决方案3】:

      对于 python 3.3

      from datetime import datetime, timedelta
      futuredate = datetime.now() + timedelta(days=10)
      

      【讨论】:

      • +1。我认为这应该是正确的答案,因为据我所知,import datetime 总是会导致问题,所以我赞成使用 from datetime import datetime 的解决方案
      • 这是最好的答案。其他答案令人困惑。这应该是公认的答案。
      • 我个人很喜欢这个,因为它在使用 from X import Y 方法时显示了 timedelta 的正确用法。
      【解决方案4】:

      如果您使用过:

      from datetime import datetime
      

      然后简单的把代码写成:

      date = datetime(int(year), int(month), 1)
      

      但是如果你用过:

      import datetime
      

      那么只有你可以写:

      date = datetime.datetime(int(2005), int(5), 1)
      

      【讨论】:

        【解决方案5】:

        您应该真正将模块导入到它自己的别名中。

        import datetime as dt
        my_datetime = dt.datetime(year, month, day)
        

        与其他解决方案相比,上述方案具有以下优势:

        • 调用变量my_datetime 而不是date 可以减少混淆,因为日期时间模块中已经存在date (datetime.date)。
        • 模块和类(都称为datetime)不会相互影响。

        【讨论】:

          【解决方案6】:

          我发现这要容易得多

          from dateutil import relativedelta
          relativedelta.relativedelta(end_time,start_time).seconds
          

          【讨论】:

            【解决方案7】:
            from datetime import datetime
            import time
            from calendar import timegm
            d = datetime.utcnow()
            d = d.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
            utc_time = time.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
            epoch_time = timegm(utc_time)
            

            【讨论】:

            • 尽量避免只使用代码的答案。你可以edit你的帖子添加一些解释和链接来支持你的代码。
            【解决方案8】:

            我遇到了同样的错误,也许您已经只使用import datetime 导入了模块,所以将from datetime import datetime 更改为仅import datetime。我改回来后它对我有用。

            【讨论】:

            • form 是错字吗?好像应该是from
            【解决方案9】:
            import time
            import datetime
            from datetime import date,timedelta
            

            您必须从datetime 导入datetime

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-12-17
              • 1970-01-01
              • 1970-01-01
              • 2020-03-03
              • 2013-08-23
              • 2015-05-17
              • 1970-01-01
              相关资源
              最近更新 更多