该calendar
模块已经有许多语言的常量。我认为最好的解决方案是使用这些常量从 dateutil 自定义解析器。这是一个简单的解决方案,适用于许多语言。我没有测试很多,所以谨慎使用。
创建一个模块localeparseinfo.py
和子类parser.parseinfo
:
import calendar
from dateutil import parser
class LocaleParserInfo(parser.parserinfo):
WEEKDAYS = zip(calendar.day_abbr, calendar.day_name)
MONTHS = list(zip(calendar.month_abbr, calendar.month_name))[1:]
现在您可以使用新的 parseinfo 对象作为dateutil.parser
.
In [1]: import locale;locale.setlocale(locale.LC_ALL, "pt_BR.utf8")
In [2]: from localeparserinfo import LocaleParserInfo
In [3]: from dateutil.parser import parse
In [4]: parse("Ter, 01 Out 2013 14:26:00 -0300", parserinfo=PtParserInfo())
Out[4]: datetime.datetime(2013, 10, 1, 14, 26, tzinfo=tzoffset(None, -10800))
它解决了我的问题,但请注意,对于所有可能的日期和时间,这是一个不完整的解决方案。看看 dateutil parser.py
,特别是parserinfo
类变量。看看 HMS 变量和其他变量。您可能可以使用日历模块中的其他常量。
您甚至可以将语言环境字符串作为参数传递给 parserinfo 类。