Datumstring führt zur Fehlermeldung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SmilingGirl
User
Beiträge: 2
Registriert: Samstag 16. April 2022, 23:40

Ich habe in einem Script einen String welcher in ein Pythonformat überführt wird. Das hat auch problemlos funktioniert, aber irgendwo muss ich ein Zeichen gelöscht oder hinzugefügt haben da anstatt des Datums nun eine Fehlermeldung erzeugt wird.
Der Datumstring ist
11 May 2016 07:21:04
die dazugehörigen Zeilen

dateTime = datetime.strptime(datestring, '%d %b %Y %H:%M:%S') ## DateTime in Pythonformat umwandeln
tempTime = time.struct_time(year=dateTime.tm_year, month=dateTime.tm_mon, day=dateTime.tm_mday,hour=dateTime.tm_hour, minute=dateTime.tm_min, second=dateTime.tm_sec)

daraufhin erhalte ich eine Fehlermeldung von der ich nicht weiss wo sie herstammt obwohl sie in dieser Zeile sein soll:
AttributeError: 'datetime.datetime' object has no attribute 'tm_year'
(an einem fehlenden Import kann es nicht liegen)


Ich hatte nochmal nachgeschlagen auf https://www.programiz.com/python-programming/time dort wird eine Klasse aufgerufen die sich time.struct_time nennt, dort wird die Funktion time.struct_time genutzt auch dort gibt es das Attribut tm_year. Ich musste leider dieses Stück in Python schreiben, eingebunden sollten aber alle Module sein, und ich kann es aus Zeitgründen auch nicht mehr in eine andere Sprache konvertieren. Dabei brauche ich nur ein Datum mit dem ich rechnen kann. Wo hat sich da der Fehler eingeschlichen der diese Fehlermeldung erzeugt ? Ich brauche dabei keine Erklärung sondern nur eine Funktion die ein Pythondatum zurückgibt in der ich die einzelnen Zeitbestandteile. Wo befindet sich der Fehler ?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Deine Erklärung passt nicht so recht zum Code. Denn nur mit einem gelöschten Zeichen kommt das nicht zustande.

Stattdessen scheint eine Umstellung von time.strptime auf datetime.strptime vorgenommen worden zu sein. Und das resultierende datetime.datetime Objekt hat andere Attribute. Ohne diesen tm_-Präfix. Zb einfach year, day, month. Welche steht in der Doku.

Nachtrag: Dann aus dem datetime Objekt wieder ein struct_time Objekt zu bauen ist sehr von hinten durch die Brust ins Auge. Wenn es das sein muss, stell wieder ganz auf time.strptime um.
SmilingGirl
User
Beiträge: 2
Registriert: Samstag 16. April 2022, 23:40

Dem kann ich nicht folgen, ich habe hier etwa Beispiele
Hier wird der String anfand des Muters umgewandelt:
https://www.programiz.com/python-progra ... e/strptime
hier wird datetime.strptime(date_string, "%d %B, %Y") genutzt

Hier wird das time.sctruct_time mit dem tm vor den Angaben verwendet
https://www.adamsmith.haus/python/examp ... ct_time%60
Liegt das wirklich an verschiedenen Zeitformaten ?
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

Setze deinen Code bitte immer in Coder-Tags. Die erscheinen automatisch, wenn du den </> Button im vollständigen Editor drückst und dazwischen gehört dein Code. Variablen werden in Python immer komplett klein geschrieben.

datetime.datetime hat kein Attribut 'tm_year' es heißt nur year. Bei den anderen tm_* genau so. Abgesehen davon würde ich die Konvertertierung datetime.datetime nach time.struct_time nicht selbst machen, sondern die entsprechende datetime Methode rufen.

Code: Alles auswählen

givendate = datetime.strptime(datestring, '%d %b %Y %H:%M:%S') 
temptime = givendate.timetuple()
Antworten