【问题标题】:Django model DateTimeField from an ISO8601 timestamp string来自 ISO8601 时间戳字符串的 Django 模型 DateTimeField
【发布时间】:2014-09-26 16:00:59
【问题描述】:

这里是 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' object has no attribute 'read'。 我究竟做错了什么?这甚至是正确的方法吗?

【问题讨论】:

  • django 的 ORM 具有非常强大的日期操作支持。我不会改变这一点。如果您有任何具体的想法,请编辑问题以查看是否有标准的方法。

标签: django datetime


【解决方案1】:

由于没有人费心回答这个问题并且它出现在谷歌搜索的顶部,这里是为了节省一些额外的搜索。正如有人提到 Django 自己的 dateparse 模块最适合这项工作,并将 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

【讨论】:

    【解决方案2】:

    似乎在 Django 1.11 中,我们可以只为 DateTimeField 分配一个 ISO 格式字符串。如下所示。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-30
      • 1970-01-01
      • 2015-11-17
      • 2012-01-28
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 2013-08-17
      相关资源
      最近更新 更多