2014-04-24 7 views
70

Ich habe ein Datensätze in dem alle Termine folgendes Format haben:Datumsstrings analysieren?

2012-10-09T19:00:55Z 

ich in der Lage sein möchten in der Lage sein Methoden zu verwenden, wie .weekday auf sie. Wie konvertiere ich sie in das richtige Format in Python?

+0

http://stackoverflow.com/questions/969285/how-do-i-translate-a-iso-8601-datetime-zeichenfolge-in-python-datetime-objekt duplizieren? – hd1

Antwort

117

Sie können dateutil.parser.parse verwenden, um Zeichenfolgen in datetime-Objekte zu analysieren.

dateutil.parser.parse wird versuchen, das Format Ihrer Zeichenfolge zu erraten, wenn Sie das genaue Format im Voraus kennen, dann können Sie datetime.strptime verwenden, dem Sie eine Formatzeichenfolge zuweisen (siehe Brent Washburnes Antwort).

from dateutil.parser import parse 

a = "2012-10-09T19:00:55Z" 

b = parse(a) 

print(b.weekday()) 
# 1 (equal to a Tuesday) 
+12

Ich weiß nicht, warum ich noch nicht von 'dateutil.parser' gehört habe. Dies sind die kleinen Dinge, die Python großartig machen. 'von somemodule import problemsolver && problemsolver.solvemyspezifischesproblem()' – kraxor

+14

@kraxor wahrscheinlich, weil es nicht wirklich Teil von Python ist, eher eine 3rd-part library. 'git clone http://example.com/module/problemsolver problemsolver && cd problemsolver && python problemsolver.py myspecificproblem' –

+1

@Ffisegydd Mein Fehler, ich habe 'pip install dateutil' anstatt mit python-vor. – Paul

58

Dies wurde bereits hier beantwortet wurde: How do I translate a ISO 8601 datetime string into a Python datetime object?

d = datetime.datetime.strptime("2012-10-09T19:00:55Z", "%Y-%m-%dT%H:%M:%SZ") 
d.weekday() 
+0

Dies ist suboptimal, da der Aufrufer Formatzeichenfolgen für den ziemlich großen Bereich der ISO 8601-Varianten bereitstellen muss (es sei denn, es gefällt ValueError, wenn die Sekunden weggelassen werden, z. B.). Der datautil-Parser dagegen behandelt diese viel besser. –

+3

@ AlexNorth-Keys: Wie ist das suboptimal? Das OP erklärte: "Ich habe Datensätze, in denen alle Daten das folgende Format haben" und erwähnte keine Varianten. Diese Antwort ist eigentlich optimal, da sie keine externen Module benötigt, sondern das eingebaute Datetime-Modul. Durch die Verwendung der exakten Formatzeichenfolge (anstatt dass datautil das Format jedes Mal erraten muss) ist die Code-Performance optimal. –

+2

Ich dachte aus Wartungssicht (oops) - aber du hast Recht, die Methode ist schneller, läuft in etwa 1/6 der Zeit dateutil.parser Ansatz. –

9

Sie einen Blick auf moment Hexe haben sollte, ist ein Hafen der ausgezeichneten js lib momentjs zu Python.

Ein Vorteil davon die Unterstützung von ISO 8601 Strings Formate sowie "% Format":

import moment 
time_string='2012-10-09T19:00:55Z' 

m = moment.date(time_string, '%Y-%m-%dT%H:%M:%SZ') 
print m.format('YYYY-M-D H:M') 
print m.weekday 

Ergebnis:

2012-10-09 19:10 
2