Django从ISO8601时间戳字符串模型DateTimeField

时间:2014-09-26 16:01:00

标签: django datetime

Django新手在这里。我正在为一个带有字符串时间戳的SQLite数据库制作一个Django模型,例如: 2014-09-23T18:43:26.692Z 。因为我想最终使用Django的过滤引擎进行查询(而不是使用 strftime ),我希望我的模型从ISO字符串生成DateTimeField对象。如果我尝试在原始数据库字段上声明DateTimeField,就像这样

startTime = models.DateTimeField(db_column='startTime')

我收到错误:' unicode'对象没有属性' isoformat'

我做了一些挖掘并尝试了以下代码:

startTime = models.DateTimeField(dateutil.parser.parse(models.TextField(db_column='startTime'))

但现在错误是 AttributeError:' TextField'对象没有属性'读' 。 我究竟做错了什么?这甚至是正确的方法吗?

2 个答案:

答案 0 :(得分:15)

由于没有人愿意回答这个问题并且它出现在谷歌搜索的顶部,这里可以节省一些额外的搜索。正如有人提到Django自己的日期分析模块最适合这项工作,将ISO8601和许多其他格式转换为Python的datetime.datetime对象。它也是时区,因此是Django项目的理想选择。

from django.utils import dateparse

x = '2014-09-23T18:43:26.692Z'
y = dateparse.parse_datetime(x)
print y

瞧瞧..!

2014-09-23 18:43:26.692000+00:00

答案 1 :(得分:0)

在Django 1.11中,我们可以将一个ISO格式字符串分配给DateTimeField。如下图所示。

Lesson.objects.create(starttime='2017-04-20T12:01:00.000Z',
                      endtime  ='2017-04-20T13:01:00.000Z')