首页 > 解决方案 > 在时区支持处于活动状态时收到一个天真的日期时间

问题描述

我正在尝试将一些记录插入到 Django 模型中,其中包括一些 unix ctime 格式的旧日期。我将其转换为 YYYY-MM-DD hh:mm:ss 并将其保存到日期时间字段中的模型中。

在运行导入作业(将 unix 日期转换为 YYYY-MM-DD hh:mm:ss 的函数)并保存它时,我在下面收到警告

C:\Python\Python36\lib\site-packages\django\db\models\fields\__init__.py:1421: RuntimeWarning: DateTimeField SensorRecords.aqdate received a naive datetime (2012-07-06 05:00:00) while time zone support is active.
  RuntimeWarning)

我应该如何导入它以避免这种情况?

这是我的转换器功能

def ctodatetime (ctimeinput):
    etime=time.ctime(int(ctimeinput))
    btime=datetime.datetime.strptime(etime,"%a %b %d %H:%M:%S %Y")
    print(btime)
    return btime

这是我的模型的片段

class SensorRecords(models.Model):
    sensorid  = models.IntegerField(default=0)
    aqdate    = models.DateTimeField(default= "1970-01-01 00:00:00")
    cmpflaf   = models.BooleanField(default=0)

标签: djangodjango-models

解决方案


您应该在传递给模型实例之前添加tz_info到对象。datetime

import pytz
import datetime
import time
from django.conf import settings


def ctodatetime(ctimeinput):
    etime = time.ctime(int(ctimeinput))
    btime = datetime.datetime.strptime(etime, "%a %b %d %H:%M:%S %Y")
    tz_aware_datetetime = btime.replace(tzinfo=pytz.timezone(settings.TIME_ZONE))
    print(tz_aware_datetetime)
    return tz_aware_datetetime


.replace()函数返回一个新的日期时间对象

有关更多信息,请参阅此 SO 帖子RuntimeWarning: DateTimeField received a naive datetime


推荐阅读