Seite 1 von 1
Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 12:34
von JakobPrie
Hallo,
ich möchte aus einem timedelta Jahre, Monate, Minuten, ... extrahieren. Leider habe ich im Internet nichts dazu gefunden (außer strptime, aber das ist ja nicht das, was ich möchte. Vielen Dank für Eure Hilfe!
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:03
von sparrow
Hast du dir mal die Attribute vom
timedelta angeschaut? Aus denen musst du das errechnen.
Dass es da nur "Tage" gibt, hat durchaus einen Sinn, weil es die einzig Konstante Einheit ist. Monate haben, ebenso wie Jahre, eine unterschiedliche Anzahl von Tagen.
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:03
von Feind
Du kannst doch einfach die Attribute vom timedelta-Objekt ansprechen?
https://docs.python.org/2/library/datet ... ta-objects
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:31
von JakobPrie
Und wie könnte ich machen, dass die Monate dennoch correct berechnet werden
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:34
von sparrow
Gar nicht.
Timedelta beinhaltet eine Zeitspanne in Tagen, Sekunden, Millisekunden. Angenommen du hast 29 Tage. Wie viele Monate sind das denn deiner Meinung nach?
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:36
von JakobPrie
ja ich hatte einen rechenfehler
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:38
von snafu
In einigen kaufmännischen Zusammenhängen (z.B. bei der Zinsrechnung) ist es so gelöst, dass einfach alle Monate 30 Tage haben und das Jahr demnach 360 Tage hat. Das ist ungenau, aber einfacher in der Handhabung. Wie viel Ungenauigkeit für den Anwendungsfall hier in Ordnung geht, müsste man sich halt selbst überlegen, falls es keine Vorgabe dazu gibt...
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:42
von __deets__
Man kann auch einfach das timedelta auf einen Zeitstempel addieren, und das resultierende Datum nutzen.
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 13:58
von JakobPrie
Also mein Anwendungsfall ist eine Stoppuhr, bei welchem die startzeit gespeichert wird. Wenn die Stopuhr dann beendet wird, soll die Zeitdifferenz zwischen dem gespeicherten und der jetzigen zeit berechnet werden. Da es sich um einen Sprachassistenten handelt, benötige ich Monate, Jahre, ...
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 14:02
von __deets__
Wenn das dein Anwendungsfall ist, hast du doch zwei Zeitstempel, und kannst von Jahren ueber Monate, Tage, Stunden, Minuten, Sekunden dich runterarbeiten.
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 14:03
von JakobPrie
Wie funktioniert das grob.
Weil Monat1-Monat2 wäre ja auch problematisch, da man ja auch 2 Monate - 4 Monate nach über einem Jahr haben kann
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 14:08
von sparrow
Ja, da musst du schon entsprechend Gehirnschmalz reinstecken. Oder du benutzt "relativedelta" aus dem externen dateutil Modul.
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 14:14
von __deets__
Ich kenne dateutil nicht, aber ich wuerde sparrows Vorschlag da folgen, und mir das an deiner Stelle anschauen.
Ansonsten rechnet man solche umschlagenden Werte zB so:
ZB mit start = 11 und ende = 5 bekommst du die erwarteten 6 Monate Unterschied.
Re: Jahre, Monate, Minute, ... aus timedelta extrahieren
Verfasst: Freitag 25. September 2020, 14:14
von __deets__
Ich kenne dateutil nicht, aber ich wuerde sparrows Vorschlag da folgen, und mir das an deiner Stelle anschauen.
Ansonsten rechnet man solche umschlagenden Werte zB so:
ZB mit start = 11 und ende = 5 bekommst du die erwarteten 6 Monate Unterschied.