如何在Python中将多种格式的日期统一转换为dd-mm-yyyy格式?
解决多种日期格式转统一dd-mm-yyyy的问题
碰到这种多格式日期的转换需求,最靠谱的方式是枚举所有可能的输入格式,逐个尝试解析,成功后再转换成目标格式。毕竟日期格式的歧义性挺高的,通用解析工具容易踩坑,指定格式反而更稳妥。
具体实现步骤:
- 导入Python的
datetime模块(处理日期解析和格式化) - 定义所有可能的输入格式列表,覆盖你给出的所有日期样式
- 写一个转换函数,遍历格式列表尝试解析,成功后输出目标格式;如果都不匹配,返回提示或原字符串
完整代码示例:
import datetime # 如果你系统默认locale不是英文,需要设置一下才能解析apr这种月份缩写 # import locale # locale.setlocale(locale.LC_TIME, 'en_US.UTF-8') def convert_to_ddmmyyyy(date_str): # 枚举所有可能的输入格式,顺序不影响,但尽量覆盖全 possible_formats = [ "%d-%m-%Y", # 匹配 "30-4-1994" "%Y-%d-%m", # 匹配 "1994-30-04" "%d/%m/%Y", # 匹配 "30/04/1994" "%d-%b-%Y", # 匹配 "30-apr-1994" "%d/%b/%Y", # 匹配 "30/apr/1994" "%Y-%d-%b" # 匹配 "1994-30-apr" ] for fmt in possible_formats: try: # 尝试用当前格式解析日期字符串 date_obj = datetime.datetime.strptime(date_str, fmt) # 转换成目标格式 dd-mm-yyyy return date_obj.strftime("%d-%m-%Y") except ValueError: # 当前格式不匹配,跳过继续试下一个 continue # 如果所有格式都失败,返回自定义提示或原字符串 return f"⚠️ 无法解析日期: {date_str}" # 测试你的日期列表 list1 = ["30-4-1994", "1994-30-04", "30/04/1994", "30-apr-1994", "30/apr/1994","1994-30-apr"] converted_list = [convert_to_ddmmyyyy(date) for date in list1] print("转换后的日期列表:") for original, converted in zip(list1, converted_list): print(f"{original} → {converted}")
代码说明:
%d代表两位日期(不足补0),%m代表两位月份,%Y代表四位年份,%b代表英文月份缩写(比如apr对应4月)- 每个格式对应你列表里的一种日期样式,确保没有遗漏
- 用
try-except捕获解析失败的情况,继续尝试下一个格式 - 如果你的系统默认语言不是英文,记得打开代码里的
locale设置,否则%b无法识别apr这种缩写
运行这段代码后,所有日期都会被转换成30-04-1994这个统一格式。
内容的提问来源于stack exchange,提问作者venkatesh




