如何将非标准格式的多语言时间字符串转换为指定格式时间戳?
解决方案
你的问题核心是dateutil.parser默认不识别非英语的星期/月份缩写、无效时区标识,再加上乱码问题,导致直接解析失败。以下是针对性的可行方案:
问题分析
四个时间字符串的异常点:
- str1:意大利语星期(
gio=周四)、月份(lug=七月)缩写 - str2:无效时区标识
zzz - str3:编码乱码(
mi�应为西班牙语mié=周三) - str4:法语星期(
mer.=周三)、月份(sept.=九月)缩写
实现思路
- 自定义非英语缩写到英语的映射,让
dateutil.parser能识别 - 移除/替换无效时区标识
- 修复乱码字符
- 统一解析并转换为目标格式
完整代码
from dateutil import parser from datetime import datetime # 非英语缩写 -> 英语缩写映射表 lang_map = { # 意大利语 'gio': 'Thu', 'lug': 'Jul', # 法语 'mer.': 'Wed', 'sept.': 'Sep', # 西班牙语(修复乱码后) 'mié': 'Wed' } def convert_time(time_str): # 修复乱码(针对str3) fixed_str = time_str.replace('mi�', 'mié') # 替换非英语缩写为英语 for orig, repl in lang_map.items(): fixed_str = fixed_str.replace(orig, repl) # 替换无效时区zzz为UTC(可根据需求修改) fixed_str = fixed_str.replace('zzz', 'UTC') # 解析并转换格式 try: dt = parser.parse(fixed_str) return dt.strftime('%Y-%m-%d %H:%M:%S') except Exception as e: return f"解析失败: {str(e)}" # 测试示例 str1='gio lug 7 00:36:20 CEST 2022' str2='Wed Nov 17 12:43:56 zzz 2021' str3='mi� nov 24 09:44:53 WET 2021' str4='mer. sept. 23 11:58:21 CEST 2020' print(convert_time(str1)) # 输出: 2022-07-07 00:36:20 print(convert_time(str2)) # 输出: 2021-11-17 12:43:56 print(convert_time(str3)) # 输出: 2021-11-24 09:44:53 print(convert_time(str4)) # 输出: 2020-09-23 11:58:21
补充说明
- 如果乱码是编码格式问题(比如原字符串是latin-1编码),可以尝试用
time_str.encode('latin-1').decode('utf-8')修复,代替直接字符替换 - 无效时区
zzz如果有实际对应时区,可替换为真实时区标识(如GMT+8),避免时间偏移误差
内容的提问来源于stack exchange,提问作者surbhi
相关产品推荐
相关产品推荐

