Dateutil是一个很好的工具,用于解析字符串格式的日期。例如

from dateutil.parser import parse
parse("Tue, 01 Oct 2013 14:26:00 -0300")

退货
datetime.datetime(2013, 10, 1, 14, 26, tzinfo=tzoffset(None, -10800))

然而,
parse("Ter, 01 Out 2013 14:26:00 -0300") # In portuguese

产生此错误:

ValueError: unknown string format

有人知道如何使dateutil知道语言环境吗?

最佳答案

据我所知,dateutil不支持语言环境(尚未!)。

我可以想到三个替代建议:

  • 日期和月份名称以dateutil.parser(作为parserinfo类的一部分)进行了硬编码。您可以继承parserinfo的子类,并将这些名称替换为葡萄牙语的适当名称。
  • 修改dateutil以根据用户的语言环境获取日期和月份名称。所以你可以做类似的事情
    import locale
    locale.setlocale(locale.LC_ALL, "pt_PT")
    
    from dateutil.parser import parse
    parse("Ter, 01 Out 2013 14:26:00 -0300")
    

    我已经启动了一个 fork ,它从calendar模块(可识别语言环境)获取名称以进行处理:https://github.com/alexwlchan/dateutil

    目前,它适用于葡萄牙语(或似乎适用),但在向主分支提交补丁之前,我想再想一想。特别是,如果遇到西欧语言未使用的字符,可能会发生怪异现象。我还没有测试过(请参阅https://stackoverflow.com/a/8917539/1558022)
  • 如果您不依赖于dateutil模块,则可以改用datetime,它已经可以识别语言环境:
    from datetime import datetime, date
    import locale
    
    locale.setlocale(locale.LC_ALL, "pt_PT")
    datetime.strptime("Ter, 01 Out 2013 14:26:00 -0300",
                      "%a, %d %b %Y %H:%M:%S %z")
    

    (请注意%z token 是not consistently supported in datetime。)
  • 关于python - 使用dateutil.parser解析另一种语言的日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19927654/

    10-10 14:35