PHP Laravel NGINX html css Bootstrap Python Symfony Apache Windows linux jquery Django ASP vanilla Slim vagrant docker Homestead MySQL Redis Git SVN ssh Root vim PhpStorm Pycharm sass less PHP Laravel android html css Vue Angular React NGINX html css Javascript

Django "RuntimeWarning: DateTimeField received a naive datetime while time zone support is active"的解决方法

原创

原创不易 ~ 转载请注明出处哦

Django中,时区(USE_TZ)默认为开启状态(在settings.py中可以看到USE_TZ = True),所以如果我们在生成时间日期时,使用的是本地时间,即未设置时区,那么Django将会提示警告信息:

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

Django官方文档中,我们可以看到以下文字:

When USE_TZ is True, Django still accepts naive datetime objects, in order to preserve backwards-compatibility. When the database layer receives one, it attempts to make it aware by interpreting it in the default time zone and raises a warning.

也就是说,为了保持向后兼容性,当我们给Django数据库层传递了一个未设置时区的datetime对象,那么Django会使用默认的时区(settings.py中的TIME_ZONE)设置这个datetime对象,并且会抛出一个警告。这也就是"RuntimeWarning: DateTimeField received a naive datetime while time zone support is active"警告信息的来源。


那么要解决这个警告,我们需要使用Djangotimezone

我们原本的代码:

import datetime  
  
now = datetime.datetime.now()

使用timezone后,我们的代码将变成:

from django.utils import timezone  
  
now = timezone.now()

如果我们需要创建一个时间,那么未使用timezone前我们的代码:

from datetime import datetime  
  
dt = datetime(2018, 8, 2)

而使用了timezone,我们可以使用以下的代码让我们的datetime对象变成timezone-aware

from django.utils import timezone  
from datetime import datetime  
  
dt = timezone.make_aware(datetime(2018, 3, 24))

然后按照正常流程使用我们的dt对象即可。


正在加载验证码......
请先完成验证
2018-08-04 05:53:36 735353255@qq.com
网站做得很棒!!!
2018-08-04 16:53:32 492617424@qq.com 回复 735353255@qq.com
多谢支持!