DateTime解析在一台机器上运行但在另一台机器上崩溃

时间:2017-03-02 17:06:06

标签: python datetime encoding strftime

我有以下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'

1 个答案:

答案 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