【问题标题】:Django dateutil ISO 8601 no 'read' attribute errorDjango dateutil ISO 8601 没有“读取”属性错误
【发布时间】:2013-06-12 23:37:53
【问题描述】:

我在 Django 视图中将日期时间转换为 ISO 8601 以推送到 Facebook 页面事件。我试过datetime.strptimefollowing best advice 我选择了:

    eventdate = event.date
    print eventdate
    date_iso = dateutil.parser.parse(eventdate)

当我打印 2013-06-18 02:50:00 时,控制台中的事件日期看起来像这样,但在我得到之前它没有得到任何进一步的信息:

Django Version: 1.4.1
Exception Type: AttributeError
Exception Value:    
'datetime.datetime' object has no attribute 'read'
Exception Location: /Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages/dateutil/parser.py in get_token, line 72
Python Executable:  /Users/mirth/.virtualenvs/ssc/bin/python
Python Version: 2.7.2
Python Path:    
['/Users/mirth/code/django/ssc',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages/requests/packages',
 '/Users/mirth/code/django/ssc/main',
 '/Users/mirth/code/django/ssc/main/../',
 '/Users/mirth/code/django/ssc',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages/pip-1.0.2-py2.7.egg',
 '/Users/mirth/.virtualenvs/ssc/lib/python27.zip',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/plat-darwin',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/plat-mac',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/lib-tk',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/lib-old',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/lib-dynload',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
 '/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages',
 '/Users/mirth/.virtualenvs/ssc/lib/python2.7/site-packages/PIL']

这可能是什么?谢谢

【问题讨论】:

    标签: python django iso8601 python-dateutil


    【解决方案1】:

    我可以像这样重现错误消息:

    In [58]: import datetime as DT
    
    In [59]: eventdate = DT.datetime(2013, 6, 18, 2, 50)
    In [60]: print(eventdate)
    2013-06-18 02:50:00
    
    In [61]: import dateutil.parser as parser
    In [62]: parser.parse(eventdate)
    AttributeError: 'datetime.datetime' object has no attribute 'read'
    

    因此,在此基础上,似乎eventdate 可能已经是一个datetime.datetime 对象。如果有,就不用打电话了

    date_iso = dateutil.parser.parse(eventdate)
    

    要将其转换为 ISO8601 格式的string,请使用

    In [66]: eventdate.isoformat()
    Out[66]: '2013-06-18T02:50:00'
    

    【讨论】:

      【解决方案2】:

      错误很明显:您传入的是 datetime 对象,而实际上 parse 需要一个字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-31
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        相关资源
        最近更新 更多