如何在Python或Django中将带时区时间转换为YYYY-MM-DD HH:MM:SS格式
Python/Django 带时区时间格式转换实现方案
Python 原生实现
方法1:使用python-dateutil(推荐,适配任意时区时间格式)
不需要提前定义输入时间的格式,可自动识别绝大多数常见的带时区时间字符串:
首先安装依赖:pip install python-dateutil
代码示例:
from dateutil import parser # 待转换的时间字符串 input_time_str = "Tue Sep 07 2021 08:34:00 GMT+0530 (India Standard Time)" # 自动解析为带时区信息的datetime对象 datetime_obj = parser.parse(input_time_str) # 格式化为目标格式 formatted_time = datetime_obj.strftime("%Y-%m-%d %H:%M:%S") print(formatted_time) # 输出:2021-09-07 08:34:00
如果需要统一转换为UTC时区后再格式化,可调整为:
from datetime import timezone utc_datetime = datetime_obj.astimezone(timezone.utc) formatted_utc_time = utc_datetime.strftime("%Y-%m-%d %H:%M:%S") # 输出:2021-09-07 03:04:00
方法2:仅使用Python标准库
不需要安装第三方依赖,适合固定输入格式的场景:
from datetime import datetime input_time_str = "Tue Sep 07 2021 08:34:00 GMT+0530 (India Standard Time)" # 先移除末尾括号内的时区名称部分 processed_str = input_time_str.split(" (")[0] # 按指定格式解析 datetime_obj = datetime.strptime(processed_str, "%a %b %d %Y %H:%M:%S GMT%z") # 格式化输出 formatted_time = datetime_obj.strftime("%Y-%m-%d %H:%M:%S")
Django 场景实现
如果你的Django项目开启了时区支持(USE_TZ = True),可以直接结合Django自带的时区工具处理,自动适配项目配置的默认时区:
from dateutil import parser from django.utils import timezone from django.conf import settings input_time_str = "Tue Sep 07 2021 08:34:00 GMT+0530 (India Standard Time)" datetime_obj = parser.parse(input_time_str) # 转换为Django项目配置的默认时区时间 local_dt = timezone.localtime(datetime_obj, timezone=settings.TIME_ZONE) formatted_time = local_dt.strftime("%Y-%m-%d %H:%M:%S")
如果需要将转换后的时间存入DateTimeField字段,直接传入带时区信息的datetime_obj对象即可,Django会自动完成时区转换存储。
注意事项
- 输入时间如果包含非英文的星期、月份缩写,需要额外指定
locale参数才能正确解析 - 如果你需要所有转换后的时间统一为某个指定时区,格式化前先调用
astimezone(目标时区对象)做时区转换即可
内容的提问来源于stack exchange,提问作者JohnTerry
相关产品推荐
相关产品推荐

