如何将任意日期格式统一转换为ddMMMMYYYY格式(如10Apr2018)
嘿,我太懂面对一堆乱七八糟日期格式的痛苦了!要把这些五花八门的日期统一成你要的ddMMMYYYY格式(比如10Apr2018),用Python的python-dateutil库绝对是最省心的方案——它能自动识别绝大多数常见的日期格式,不用你手动写一堆正则或者格式匹配规则。
步骤1:安装依赖库
如果还没装python-dateutil,先通过pip快速安装:
pip install python-dateutil
步骤2:编写转换代码
下面是一个简单的函数,能把你给出的所有日期格式都转换成目标样式:
from dateutil import parser def convert_to_target_date(date_str): # 自动解析任意合法的日期字符串,不管格式有多杂 parsed_date = parser.parse(date_str) # 格式化为ddMMMYYYY格式(%b会输出月份缩写,比如Apr、Mar,完全匹配你的示例) return parsed_date.strftime("%d%b%Y") # 用你给出的日期做测试 test_dates = [ "17 Jun 14 12:26:20 Tue", "6 Mar 2018 05:16:51", "8 Dec 2014 13:41:09 +0000", "16 Sep 2014 16:08:47 -0400", "29 Oct 2014 20:12:33 +0530", "Tue, 8 Jul 2014 11:48:53 -0700", "Tue, 03 Jun 2014 08:35:05 GMT", "Tue, 03 Jun 2014 10:59:00 GMT", "Wed, 04 Jun 2014 12:26:52 GMT", "Wed, 7 Mar 2018 17:44:11 +0530", "Wed, 07 Mar 2018 11:29:00 +0..." ] for date in test_dates: try: result = convert_to_target_date(date) print(f"原始日期: {date:45} -> 转换后: {result}") except Exception as e: print(f"无法解析日期: {date} | 错误信息: {str(e)}")
测试结果(部分)
运行上面的代码后,你会得到类似这样的输出:
原始日期: 17 Jun 14 12:26:20 Tue -> 转换后: 17Jun2014
原始日期: 6 Mar 2018 05:16:51 -> 转换后: 06Mar2018
原始日期: 8 Dec 2014 13:41:09 +0000 -> 转换后: 08Dec2014
原始日期: Tue, 03 Jun 2014 08:35:05 GMT -> 转换后: 03Jun2014
为什么选这个方案?
dateutil.parser简直是处理混乱日期的神器:带星期前缀的、带时区偏移的、带GMT标记的、年份是两位的(会自动推断合理的年份范围),它都能完美搞定,完全不用你为每种格式写单独的匹配逻辑,省超多时间!
如果遇到极端特殊的格式解析失败,再考虑用datetime.strptime配合自定义格式字符串来针对性处理,但你给出的这些日期都能完美解析。
内容的提问来源于stack exchange,提问作者user9364391

