2016-12-16 4 views
4

Ich weiß, dass ähnliche Fragen gestellt wurden, aber sie schien mit der Art zu tun zu haben, wie datetime mit Zeitzonen umgeht (oder nicht handelt).Python Datetime Strptime Fehler: '-' ist eine schlechte Direktive im Format '% -m -% - d-% y% -H:% M:% S'

Die Einrichtung ist ein wenig kompliziert, und wahrscheinlich das Problem nicht relevant, aber ich dachte, es wäre wichtig, den Code wie es ist zu schließen, so dass ein wenig Hintergrund:

Ich habe ein Wörterbuch von Arrays bekommt. Jedes dieser Arrays stellt einen "Versuch" derselben Person dar, der jedoch zu unterschiedlichen Zeiten stattfindet. Letztendlich werde ich nach dem frühesten dieser Daten suchen. Dies kann ein bisschen eine umständliche Lösung sein, aber ich konvertiere alle Daten in Datetime-Objekte, finde die früheste und dann nur mit diesem Index, um den ersten Versuch herauszuziehen:

Hier ist, wie der Code aussieht Setup, dass Array von Versuch Datetimes:

for key in duplicates_set.keys(): 
    attempt_dates = [datetime.strptime(attempt['Attempt Date'], "%-m-%-d-%y %-H:%M:%S") for attempt in duplicates_set[key]] 

Hier ist das Format, was einer der ursprünglichen Datumsstrings wie folgt aussieht:

12-5-2016 3:27:58 PM

Was ich zurück bekommt:

ValueError: '-' is a bad directive in format '%-m-%d-%y %-H:%M:%S' 

Ich gehe davon aus, dass vor dem ‚m‘ gesetzt auf die Striche sich bezieht, ‚d‘ und ‚H‘, weil sie nicht mit Nullen aufgefüllt Dezimalstellen sind. Warum sagt es mir das?

+2

Vermutlich wollten Sie '% m-% d-% y% H:% M:% S'? https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior – jtbandes

+2

@jtbandes, '% -H' tatsächlich * hat * sinnvolle Verwendung in GNU strftime - es unterscheidet sich von' % H ', indem führende Nullen übersprungen werden. –

+0

"Vermutlich" war zu hart, aber ich kann meinen Kommentar nicht mehr bearbeiten ... – jtbandes

Antwort

4

%-* - Padding überspringen - ist eine GNU libc-Erweiterung. Es ist nicht Teil von POSIX strftime und daher nicht garantiert übertragbar auf Systeme, auf denen Ihre Zeitformatierungsaufrufe nicht von der GNU strftime C-Bibliotheksfunktion unterstützt werden.

The Python datetime module documentation legt explizit die Formatzeichenfolgen fest, die es unterstützt, und diese Erweiterung wird nicht angegeben. Obwohl dies in GNU date und GNU strftime() unterstützt wird, ist es in Python datetime nicht verfügbar.

Verwandte Themen