如何为strptime转换的datetime添加时区以解决naive datetime警告
解决Django时区警告的方法
当你用strptime解析日期得到的是无时区信息的naive datetime,而Django开启时区支持后,DateTimeField要求接收带时区的aware datetime,所以需要给解析后的对象补上时区信息。
直接修改你的代码即可,复用你之前用到的datetime.timezone.utc:
import datetime # 假设date是前端传入的'2022-11-11' paydate = datetime.datetime.strptime(date, '%Y-%m-%d').replace(tzinfo=datetime.timezone.utc).isoformat()
原理说明:
strptime(date, '%Y-%m-%d')解析出的是2022-11-11 00:00:00,这个datetime对象没有时区标记,属于naive类型。replace(tzinfo=datetime.timezone.utc)给这个naive datetime添加UTC时区标记,转换成aware datetime。- 最后调用
isoformat()得到符合要求的带时区格式的字符串。
如果你的业务需要用本地时区而非UTC,也可以这么做(不推荐在Django中使用,建议统一用UTC存储时间):
# 获取系统本地时区 local_tz = datetime.datetime.now().astimezone().tzinfo paydate = datetime.datetime.strptime(date, '%Y-%m-%d').replace(tzinfo=local_tz).isoformat()
内容的提问来源于stack exchange,提问作者akhil
相关产品推荐
相关产品推荐

