ISO8601-Datetime in "normales" Datetime umwandeln

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
Nic0205
User
Beiträge: 4
Registriert: Mittwoch 18. November 2020, 07:54

Hallo zusammen,

ich bin ganz neu in der Python-Welt und mache daher gerade erst meine ersten Schritte.

Ich habe hier aus einer CSV Datei ein Feld im ISO8601-Format:

Code: Alles auswählen

2020-03-02T17:00:00+0000
Ich würde das jetzt gerne in ein "ganz normales" Format umwandeln, so dass ich damit auch ganz normal rechnen, vergleichen, etc. kann.
Auch mit matplot würde ich die Daten gerne nutzen. Hier bekomme ich aber die Fehlermeldung "

Code: Alles auswählen

TypeError: unhashable type: 'numpy.ndarray'"
Was ja auch wieder auf ein falsches Format hindeutet.

Ich habe alles möglich probiert, aber irgendwie klappt es nicht.
Meine Versuche waren z.B.:

Code: Alles auswählen

     e=datetime.datetime.strptime(Datum_Faelle['time_iso8601'][ind], "%Y-%m-%dT%H:%M:%S.%fZ")
     e=datetime.datetime.strptime("2020-03-02T17:00:00+0000", "%Y-%m-%dT%H:%M+%z")
     e=dateutil.parser.parse("2020-03-02T17:00:00+0000")
     a= str(datetime.datetime.now()).replace('2020-03-02T17:00:00+0000','T') 
print(a)
import iso8601
x=iso8601.parse_date("2020-03-02T17:00:00+0000")
Hat jemand von Euch einen Ansatz für mich, wie ich das bewerkstelligen kann?
einfachTobi
User
Beiträge: 512
Registriert: Mittwoch 13. November 2019, 08:38

`dateutil` bietet einen Parser, der ein datetime.datetime-Objekt zurückgibt, an:

Code: Alles auswählen

import dateutil.parser
print(dateutil.parser.isoparse("2020-03-02T17:00:00+0000"))
Edit: datetime.datetime hat auch eine Methode fromisoformat(). Dann muss allerdings das Format etwas anders aussehen:

Code: Alles auswählen

import datetime.datetime
foo  = datetime.datetime.fromisoformat("2020-03-02T17:00:00+00:00")  # +- Format im Offset statt 0000
print(foo)
Zuletzt geändert von einfachTobi am Mittwoch 18. November 2020, 09:15, insgesamt 1-mal geändert.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Nimm 3rd-party-Modul dateutil (heißt py-dateutil im PyPI):

Code: Alles auswählen

>>> from dateutil import parser
>>> iso_time = "2020-03-02T17:00:00+0000"
>>> datetime = parser.parse(iso_time)
>>> datetime
datetime.datetime(2020, 3, 2, 17, 0, tzinfo=tzutc())

Edit: einfachTobi war schneller ;)

Editedit: Ach witzig. Es scheint, als gäbe es da zwei verschiedene dateutil-Module. Das eine heißt "python-dateutil", das andere "py-dateutil". Da ist Verwirrung vorprogrammiert.

Die Lösung von einfachTobi basiert auf dem in der Python-Dokumentation verlinkten "python-dateutil", das deswegen zu präferieren ist.
Nic0205
User
Beiträge: 4
Registriert: Mittwoch 18. November 2020, 07:54

Ich danke Euch! Funktioniert beides super!
Antworten