如何在Django项目中将日期字符串转换为带时区的datetime对象
报错原因
你代码中的格式符使用错误:%Z 用于匹配时区名称(如UTC、CST),而你拼接的+00属于时区偏移量,需要使用小写的%z完成匹配。
实现方案
原生Python修正版
直接调整格式规则即可完成转换:
from datetime import datetime df = "2021-11-11" df = df + " 00:00:00+0000" # 时区偏移量需要补全4位,+00等同于+0000 start_d = datetime.strptime(df, '%Y-%m-%d %H:%M:%S%z')
运行后即可得到UTC时区当天午夜的带时区datetime对象。
Django项目推荐方案
Django自带了适配项目时区配置的专用处理工具,无需手动拼接字符串,兼容性更强:
import datetime from django.utils import timezone from django.utils.dateparse import parse_date df = "2021-11-11" # 先将日期字符串转为date对象 date_obj = parse_date(df) # 转为项目配置时区的当天午夜带时区datetime对象 start_d = timezone.make_aware(datetime.combine(date_obj, datetime.min.time()))
如果需要固定使用UTC时区而非项目默认时区,可以指定时区参数:
import datetime from django.utils import timezone from django.utils.dateparse import parse_date df = "2021-11-11" date_obj = parse_date(df) start_d = timezone.make_aware( datetime.combine(date_obj, datetime.min.time()), timezone=timezone.utc )
该方案生成的datetime对象可以直接用于ORM的DateTime字段过滤操作,和数据库中存储的带时区时间格式完全兼容。
内容的提问来源于stack exchange,提问作者Manuel Santi
相关产品推荐
相关产品推荐

