You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:06:07