【问题标题】:PYTHON: RuntimeWarning: DateTimeField received a naive datetime while time zone support is active. RuntimeWarning)PYTHON:RuntimeWarning:DateTimeField 在时区支持处于活动状态时收到了一个简单的日期时间。运行时警告)
【发布时间】:2018-05-14 16:45:39
【问题描述】:

我正在使用一个 API,该 API 向我传递了一个时间/日期字段,他们无法保证其中始终包含时区信息。

根据他们的文档,该字段可以是:

Empty String,
YYYY-MM-DD,
YYYY-MM-DDTHH:MM:SS, or
YYYY-MM-DDTHH:MM:SS+TIMEZONE

当我尝试将该字段保存到数据库中的模型时,如果数据没有时区信息,则会生成此错误。我保存此值的字段在其模型中定义为:

my_timedate_field = models.DateTimeField()

至少我想禁止在保存每条记录时生成警告。有什么具体的我可以做的让这更干净吗?

编辑:警告是:

RuntimeWarning: DateTimeField my_timedate_field received a naive datetime while time zone support is active. RuntimeWarning)

每次我处理 api 调用时,这些警告都会出现在我的日志中 - 考虑到元素的显示方式,有时每个 api 调用会出现 5-10 次。

【问题讨论】:

  • 您要删除哪些警告?我认为您可以尝试使用 date_parser 来解析正确的时间格式,因为它们似乎都是可识别的
  • 我已经在问题中添加了具体的警告信息。

标签: python django datetime django-models timezone


【解决方案1】:

我想通了。

事实证明——假设我不能指望时区信息总是作为传入 API 传递的字符串的一部分——这是我能做的最好的事情。

通过使用 django 模型声明:

api_time = models.DateTimeField()

发送的不包含时区信息的时间值仍然可以存储在该字段中。出现警告是为了让您知道您正在将非时区字段保存在可识别时区的数据库字段中。

再次——这是警告:

RuntimeWarning: DateTimeField api_time received a naive datetime 
  (2018-08-03 09:04:25) while time zone support is active.

【讨论】:

猜你喜欢
  • 2012-07-18
  • 2020-09-19
  • 1970-01-01
  • 2016-10-03
  • 2019-07-23
  • 2020-10-13
  • 2020-06-19
  • 2014-12-03
  • 1970-01-01
相关资源
最近更新 更多