序列化和反序列化datetimefield类型对象(Django app)

时间:2016-05-31 19:02:44

标签: python django datetime serialization

在我的Django应用程序中,我有一个datetime对象,我需要序列化然后反序列化。当我尝试它时,我收到错误:

  

ValueError:时间数据'2016-05-31T18:57:17.280939 + 00:00'没有   匹配格式'%Y-%m-%d%H:%M:%S。%f'

我的序列化和反序列化代码是:

timestring = time.isoformat() #where timestring is DateTimeField type object, instantiated in Django

timeobj = datetime.strptime(timestring, "%Y-%m-%d %H:%M:%S.%f")

我做错了什么,如何克服驼峰?非常感谢您的指导。

2 个答案:

答案 0 :(得分:1)

timeobj = datetime.strptime(timestring, "%Y-%m-%dT%H:%M:%S.%f+00:00")

(添加T作为日期/时间分隔符,并硬编码utc偏移字符串部分)

将解决您的问题...我认为它相当安全......我个人总是跟着

from dateutil.parser import parse as date_parse
dt_obj = date_parse(timestring)

几乎总是有效,并且不要求我对您可能需要的日期字符串进行硬编码pip install python-dateutil

答案 1 :(得分:0)

所以这里有两件事:

  1. 您的格式字符串在$db = mysqli_connect("localhost","my_user","my_password","my_db"); %d之间有一个空格,但测试字符串有一个%H

  2. Python T不适用于时区名称/偏移。来自relevant docs

  3. datetime.datetime.strptime
         

    返回与date_string对应的日期时间,根据进行解析   格式。这相当于datetime(*(time.strptime(date_string,   格式)[0:6]。))

    因此,您可以提取classmethod datetime.strptime(date_string, format) yearmonthdayhourminutesecond,但是microsecond指令仅适用于%z,而非strftime

    所以,总结一下:

    strptime

    In [18]: datetime.strptime(datetime.today().isoformat(), '%Y-%m-%dT%H:%M:%S.%f')
    Out[18]: datetime.datetime(2016, 5, 31, 15, 20, 20, 581261)