加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何解决strptime()引起的天真日期时间RuntimeWarning

发布时间:2020-12-20 11:25:04 所属栏目:Python 来源:网络整理
导读:我正在尝试编码而不会在我的控制台中发出任何警告.到目前为止,我一直非常擅长避免它,直到这一个案例,这对我来说似乎是一个鸡和鸡蛋的情况. from datetime import datetime as dt last_contacted = "19/01/2013"current_tz = timezone.get_current_timezone()
我正在尝试编码而不会在我的控制台中发出任何警告.到目前为止,我一直非常擅长避免它,直到这一个案例,这对我来说似乎是一个鸡和鸡蛋的情况.

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调用将失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读