2017-03-02 47 views
0

我有以下DateTime和字符串编码相关的问题:DateTime的一台机器,但死机的解析工作在另一个

我想分析的日期出字符串“Freitag的,马兹03. 2017年”的。要做到这一点,我用下面的代码行:

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' 

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实例崩溃此代码上运行

+2

几乎可以确定您尚未在OpenShift服务器上安装de_DE语言环境。 – felipsmartins

+0

@felipsmartins嗯,这不会打破解析任何其他德国日期?其他几个月工作,这表明这确实是一个编码问题 – rodalfus

+0

@rodalfus如果你的服务器不支持UTF-8编码,RIP – Jerfov2

回答

0

我无法尝试这一点,因此无法分辨是否除了设置语言环境之外的任何事情,如果确实如此。但是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 
相关问题