2015-05-07 2 views
13

Ich habe eine Variable testeddate, die ein Datum im Textformat wie 4/25/2015 hat. Ich versuche, es zu %Y-%m-%d %H:%M:%S wie folgt konvertieren:TypeError: Deskriptor 'strftime' erfordert ein 'datetime.date' Objekt, aber erhielt einen 'Text'

dt_str = datetime.strftime(testeddate,'%Y-%m-%d %H:%M:%S') 

aber ich in diesen Fehler leite:

TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'Text' 

Wie kann ich dieses Problem lösen?

+1

'datetime.strftime' nicht eine statische Methode ist, müssen Sie es auf einem tatsächlichen' datetime' Objekt aufzurufen: https://docs.python.org/2/library/datetime.html#datetime. date.strftime – jonny

+0

@jonny - das bedeutet, ich sollte etwas wie datetime.datetime.strftime verwenden – user2125827

+0

Siehe ['strftime()' und 'strptime()' Verhalten] (https://docs.python.org/2/library/ datetime.html # strftime-and-strptime-behavior) – tynn

Antwort

18

Sie haben ein Objekt Text. Die strftime Funktion erfordert ein Datetime-Objekt. Der folgende Code nimmt einen Zwischenschritt des Text einen datetime Umwandlung strptime

import datetime 
testeddate = '4/25/2015' 
dt_obj = datetime.datetime.strptime(testeddate,'%m/%d/%Y') 

An diesem Punkt verwendet wird, ist die dt_obj Datetime-Objekt. Dies bedeutet, dass wir es problemlos in eine Zeichenfolge mit beliebigem Format konvertieren können. In Ihrem speziellen Fall:

dt_str = datetime.datetime.strftime(dt_obj,'%Y-%m-%d %H:%M:%S') 

Die dt_str ist jetzt:

'2015-04-25 00:00:00' 
+3

Oder kann nur verwenden: dt_str = datetime.strptime (getestetes Datum, '% m /% d /% Y'). Strftime ('% Y-% m-% d% H:% M:% S') unter der Annahme, dass der Import ist: from datetime import datetime –

+0

Ich bekomme einen Fehler 'AttributeError: type Objekt 'datetime.datetime' hat kein Attribut 'datetime'' bei Zeile' dt_obj = datetime.datetime.strptime (testedate,'% m /% d/% Y ') ' – user2125827

+1

Was ist Ihre Importaussage? Wenn Sie nur 'Import Datetime' gehen, wird es so funktionieren, wie ich es habe. Wenn Sie 'from datetime import datetime' verwenden, ändern Sie diese Zeile in' dt_obj = datetime.strptime (Testdatum, '% m /% d /% Y') ' – Andy

0

Eine weniger elegante Lösung würde bedeuten, den String direkt zu manipulieren.

testeddate = '4/25/2015' 
month, day, year = testeddate.split('/') 
testeddate = '-'.join([year, month, day]) + ' 00:00:00' 
Verwandte Themen