我正在尝试将一些记录插入Django模型,其中包括unix ctime格式的一些旧日期。我将其转换为YYYY-MM-DD hh:mm:ss并将其保存到datetime字段中的模型中。
在运行导入作业(将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)
答案 0 :(得分:2)
在传递给模型实例之前,应将 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
答案 1 :(得分:1)
特定于Django的解决方案可以按以下方式使用django.utils.timezone
:
from datetime import datetime
from django.utils import timezone
from django.conf import settings
def ctodatetime(ctimeinput):
etime = time.ctime(int(ctimeinput))
btime = datetime.strptime(etime, "%a %b %d %H:%M:%S %Y")
tz = getattr(settings, 'TIME_ZONE', None)
return timezone.make_aware(btime, tz)
这取决于btime
将是一个简单的时间戳,并利用Django的make_aware()将其转换为可识别时区的时间戳。