2017-03-02 43 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 
相關問題