我正在尝试编码而不会在我的控制台中发出任何警告.到目前为止,我一直非常擅长避免它,直到这一个案例,这对我来说似乎是一个鸡和鸡蛋的情况.
from datetime import datetime as dt
last_contacted = "19/01/2013"
current_tz = timezone.get_current_timezone()
date_time = dt.strptime(last_contacted, get_current_date_input_format(request))
date_time = current_tz.localize(date_time)
第三行是抛出这个警告:
RuntimeWarning: DateTimeField received a naive datetime (2013-01-19
00:00:00) while time zone support is active.)
它有点奇怪,因为我需要先将unicode转换为日期时间才能在第四行将datetime对象转换为datetime-aware对象(带有timezone支持).
专家的任何建议?
谢谢
更新:
def get_current_date_input_format(request):
if request.LANGUAGE_CODE == 'en-gb':
return formats_en_GB.DATE_INPUT_FORMATS[0]
elif request.LANGUAGE_CODE == 'en':
return formats_en.DATE_INPUT_FORMATS[0]
最佳答案 从评论到你的问题,我猜你在你的代码中真正拥有的是这样的:
from datetime import datetime as dt
last_contacted = "19/01/2013"
current_tz = timezone.get_current_timezone()
model_instance.date_time = dt.strptime(last_contacted, get_current_date_input_format(request))
model_instance.date_time = current_tz.localize(date_time)
其中model_instance是Model的一个实例,它具有一个名为date_time的DateTimeField.
class MyModel(models.Model)
....
date_time = DateTimeField()
Python datetime.strptime
函数返回一个天真的日期时间对象,您尝试将其分配给DateTimeField,然后生成警告,因为启用时区支持时,非天真日期时间对象的使用不正确.
如果将对strptime和localize的调用组合在一行上,则在分配到date_time之前完成从天真日期时间到非天真日期时间的转换的完整计算,因此在这种情况下您不会收到错误.
附加说明:如果请求中没有时区,则get_current_date_input_format函数应返回一些默认时区,否则strptime调用将失败.