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

如何将非标准格式的多语言时间字符串转换为指定格式时间戳?

解决方案

你的问题核心是dateutil.parser默认不识别非英语的星期/月份缩写、无效时区标识,再加上乱码问题,导致直接解析失败。以下是针对性的可行方案:

问题分析

四个时间字符串的异常点:

  • str1:意大利语星期(gio=周四)、月份(lug=七月)缩写
  • str2:无效时区标识zzz
  • str3:编码乱码(mi�应为西班牙语mié=周三)
  • str4:法语星期(mer.=周三)、月份(sept.=九月)缩写

实现思路

  1. 自定义非英语缩写到英语的映射,让dateutil.parser能识别
  2. 移除/替换无效时区标识
  3. 修复乱码字符
  4. 统一解析并转换为目标格式

完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:49