Jahre, Monate, Minute, ... aus timedelta extrahieren

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
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

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!
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

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.
Feind
User
Beiträge: 7
Registriert: Montag 19. Februar 2018, 18:38

Du kannst doch einfach die Attribute vom timedelta-Objekt ansprechen?

https://docs.python.org/2/library/datet ... ta-objects
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

Und wie könnte ich machen, dass die Monate dennoch correct berechnet werden
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Gar nicht.
Timedelta beinhaltet eine Zeitspanne in Tagen, Sekunden, Millisekunden. Angenommen du hast 29 Tage. Wie viele Monate sind das denn deiner Meinung nach?
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

ja ich hatte einen rechenfehler
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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...
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Man kann auch einfach das timedelta auf einen Zeitstempel addieren, und das resultierende Datum nutzen.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

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, ...
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn das dein Anwendungsfall ist, hast du doch zwei Zeitstempel, und kannst von Jahren ueber Monate, Tage, Stunden, Minuten, Sekunden dich runterarbeiten.
JakobPrie
User
Beiträge: 91
Registriert: Sonntag 21. Juni 2020, 11:12

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
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ja, da musst du schon entsprechend Gehirnschmalz reinstecken. Oder du benutzt "relativedelta" aus dem externen dateutil Modul.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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:

Code: Alles auswählen

monate = (ende + 12 - start) % 12
ZB mit start = 11 und ende = 5 bekommst du die erwarteten 6 Monate Unterschied.
__deets__
User
Beiträge: 14540
Registriert: Mittwoch 14. Oktober 2015, 14:29

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:

Code: Alles auswählen

monate = (ende + 12 - start) % 12
ZB mit start = 11 und ende = 5 bekommst du die erwarteten 6 Monate Unterschied.
Antworten