2016-07-11 17 views
1

Fragen, ob jemand eine Problemumgehung für einen seltsamen Fehler hat, bekomme ich mit datetime.datetime.strptime.datetime.strptime unerwartetes Verhalten - Gebietsschema Ausgabe

HINWEIS: kein Duplikat des Zeitzonenproblems.

Ich erhalte diese Ausnahme (getrimmten proprietäre Teile):

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' 

Diese Ausnahme während der Laufzeit auf reale Daten geschieht. Aber wenn ich es lokal mit den gleichen Daten teste, funktioniert es ?!

Sie können sich selbst testen, die Ausnahme selbst macht nicht viel Sinn machen, da kann ich eigentlich dieses Format verwenden, um die Datetime-Format entsprechen:

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

wirklich nicht sicher, was hier vor sich geht. Jede Hilfe wird geschätzt. (Python 2.7.11)

+6

'% b' ist Gebietsschema empfindlich ... sind Locales abweichend ...? – deceze

+0

@deceze Welchen eleganten Python-Befehl kann ich verwenden, um das Gebietsschema zu erhalten? –

+1

Siehe Hinweis (1) unter https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior: 'locale.getlocale()'. – deceze

Antwort

2

Dank deceze'scomment war ich in der Lage, eine Lösung für dieses Problem zu finden.

In der Tat war das Problem mit dem Gebietsschema der Maschine.

(für einige Hintergrundinformationen, ich war die Validierung von Zertifikaten auf einer Maschine und das Maschine locale von dem Zeitstempel des Zertifikats anders waren)

Lösung war einfach, setzt nur das Gebietsschema auf dem Gerät, bevor die Zertifikate zu validieren.

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