Seite 1 von 1

ISO8601-Datetime in "normales" Datetime umwandeln

Verfasst: Mittwoch 18. November 2020, 08:37
von Nic0205
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?

Re: ISO8601-Datetime in "normales" Datetime umwandeln

Verfasst: Mittwoch 18. November 2020, 09:09
von einfachTobi
`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)

Re: ISO8601-Datetime in "normales" Datetime umwandeln

Verfasst: Mittwoch 18. November 2020, 09:10
von sparrow
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.

Re: ISO8601-Datetime in "normales" Datetime umwandeln

Verfasst: Mittwoch 18. November 2020, 13:12
von Nic0205
Ich danke Euch! Funktioniert beides super!