我有以下DateTime和字符串编码相关的问题:
我想解析字符串“Freitag,03.März2017”中的日期。为此,我使用以下代码行:
locale.setlocale(locale.LC_ALL, "de_DE")
if re.findall(r"[\w]+, [0-9][0-9]\. [\w]+ [0-9]+", date):
self.date = datetime.datetime.strptime(date.strip().encode("utf-8"), '%A, %d. %B %Y').date()
else:
formattedDate = ', 0'.join(date.split(", ")).encode("utf-8")
self.date = datetime.datetime.strptime(formattedDate.strip(), '%A, %d. %B %Y').date()
这在我的机器上运行良好(macOS,系统语言是德语),但在运行此代码的OpenShift实例上崩溃:
self.date = datetime.datetime.strptime(formattedDate.strip(), '%A, %d. %B %Y').date()
File "/opt/rh/python27/root/usr/lib64/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'Freitag, 03. M\xc3\xa4rz 2017' does not match format '%A, %d. %B %Y'
答案 0 :(得分:0)
我无法尝试这一点,因此无法判断它是否可以解决设置 locale 的问题,如果确实如此。但是babel似乎确实使用自己的代码来处理语言环境。
>>> from babel.dates import format_date, format_datetime, format_time, get_month_names
>>> import re
>>> re.search(r'(\d\d)\. ([\w]+) (\d{4})', "Freitag, 03. März 2017").groups()[1]
'März'
>>> months = [get_month_names(width='wide',context='stand-alone', locale='de_DE')[m] for m in range(1,13)]
>>> months
['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember']
>>> months.index('März')
2