2016-07-11 7 views
1

Удивление, если у кого-то есть обходное решение для странной ошибки, я получаю с datetime.datetime.strptime.datetime.strptime неожиданное поведение - проблема с локалью

ПРИМЕЧАНИЕ: не является дубликатом проблемы с часовым поясом.

Я получаю это исключение (обрезанный запатентованные части):

Traceback (most recent call last): 
    ... 
    File "/usr/local/lib/python2.7/_strptime.py", line 325, in _strptime 
    (data_string, format)) 
ValueError: time data 'Jul 10 12:45:52 2016' does not match format '%b %d %H:%M:%S %Y' 

Это исключение происходит во время выполнения на реальных данных. Но когда я тестирую его локально с теми же данными, он работает ?!

Вы даже можете проверить себя, сама по себе исключение не имеет особого смысла, так как я на самом деле может использовать этот формат в соответствии с форматом DATETIME:

>>> from datetime import datetime 
>>> s = 'Jul 10 12:45:52 2016' 
>>> p = '%b %d %H:%M:%S %Y' 
>>> d = datetime.strptime(s, p) 
>>> print d 
2016-07-10 12:45:52 

На самом деле не уверен, что здесь происходит. Любая помощь оценивается. (Python 2.7.11)

+6

'% b' является чувствительным к региону ... являются локалями, отличающимися ...? – deceze

+0

@deceze Какую элегантную команду python можно использовать для получения локали? –

+1

См. Примечание (1) на странице https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior: 'locale.getlocale()'. – deceze

ответ

2

Благодаря deceze'scomment Мне удалось найти решение этой проблемы.

Действительно, проблема была связана с языком машины.

(для некоторого фона, я проверяющие сертификаты на машине и что машины локали отличается от штампов времени сертификата)

Решение было простым, просто установить локаль на машине перед тем проверки сертификатов.

locale.setlocale(locale.LC_ALL, 'en_US.utf8')