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

Python Datetime设置西语locale后%p缺失问题求助

解决设置es_ES locale后datetime格式化中%p消失的问题

这不是datetime库的bug,核心原因是西班牙语(es_ES)的locale默认采用24小时制体系,没有定义AM/PM对应的本地化字符串,所以切换到该locale后,%p格式化符会输出空内容。

给你两个更简便的解决思路:

  • 拆分处理时间与日期部分:
    既然你需要西班牙语的月份,但想保留英文的AM/PM标识,直接把时间和日期分开格式化,再拼接结果即可,不需要维护额外的月份字典:

    import datetime
    import locale
    
    # 配置西班牙语locale
    locale.setlocale(locale.LC_TIME, 'es_ES.utf8')
    
    # 假设这是从API获取的UTC时间
    utc_time = datetime.datetime.utcnow()
    # 时间部分用默认locale保留AM/PM,日期部分用西班牙语locale
    time_str = utc_time.strftime("%I:%M:%S %p")
    date_str = utc_time.strftime("%d de %B del %Y")
    final_output = f"{time_str} . {date_str}"
    print(final_output)
    
  • 手动补全西班牙语locale的AM/PM定义(如果需要西班牙语风格的标识):
    西班牙语日常很少用12小时制,但如果确实需要,可以手动覆盖locale的am_pm配置,这样就能直接用原格式字符串格式化:

    import datetime
    import locale
    
    locale.setlocale(locale.LC_TIME, 'es_ES.utf8')
    # 手动设置西班牙语的AM/PM对应值,也可以用('a.m.', 'p.m.')
    locale._override_localeconv['am_pm'] = ('AM', 'PM')
    
    utc_time = datetime.datetime.utcnow()
    final_output = utc_time.strftime("%I:%M:%S %p . %d de %B del %Y")
    print(final_output)
    

内容的提问来源于stack exchange,提问作者Diego

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 23:17:04