Seite 2 von 2

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Donnerstag 20. Juli 2023, 13:07
von __blackjack__
@Pitwheazle: Du willst ja auch kein `datetime`-Objekt sondern ein `timedelta`-Objekt. Warum kannst Du das nicht erstellen?

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Freitag 21. Juli 2023, 16:26
von Pitwheazle
Ich habe es jetzt mit

Code: Alles auswählen

gesamtzeit = datetime(1970,1,1,0,0,0)
hinbekommen. Zeit ohne Jahr scheint es nicht zu geben. Geht prima - Danke!

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Freitag 21. Juli 2023, 17:28
von __blackjack__
@Pitwheazle: Doch es gibt Objekte für Zeitspannen, die heissen `datetime.timedelta` und die hast Du ja zum aufaddieren, da musst Du einfach eines mit dem Wert 0 als Anfangswert erstellen. Ein Datum (mit Zeit) ist keine `gesamtzeit` sondern immer nur ein Zeit*punkt*.

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 14:30
von Pitwheazle
__blackjack__ hat geschrieben: Freitag 21. Juli 2023, 17:28 @Pitwheazle: Doch es gibt Objekte für Zeitspannen, die heissen `datetime.timedelta` und die hast Du ja zum aufaddieren, da musst Du einfach eines mit dem Wert 0 als Anfangswert erstellen. Ein Datum (mit Zeit) ist keine `gesamtzeit` sondern immer nur ein Zeit*punkt*.
Also wahrscheinlich bin ich da wieder zu blöd zu. Mir ist schon klar, dass ein Datum mit Zeit keine Zeitspanne darstellt. Ich finde aber bei meiner Suche immer nur Beispiele wie man mit datetime.timedelta zu einem Zeitpunkt Werte addiert oder subtrahiert aber keine Möglichkeit, mit timedelta eine Zeitspanne auf Null zu setzen.

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 14:51
von __blackjack__
@Pitwheazle: Dann hör mal auf zu suchen und *denke*. Wie könnte man das denn wohl machen. Ich fasse es nicht das Du das nicht hinbekommst. Wie erstellt man ein `timedelta`-Objekt? Was muss man da übergeben? Welchen Wert muss man da übergeben wenn man 0 haben will? So dämlich kann man sich doch eigentlich gar nicht anstellen. Sorry, aber ich fasse das gerade echt so *gar nicht*. 😱

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 15:18
von noisefloor
Hallo,

wo und wie suchst du? Bei Sachen zur Standardbibliothek macht es IMHO immer Sinn, zuerst die zugehörige Doku von Python zu lassen. Und da steht direkt am Anfang, dass ein timedelta-Objekt per Default auf Null (0) initialisiert wird.

Beispiel:

Code: Alles auswählen

>>> import datetime
>>> now = datetime.datetime.now()
>>> now
datetime.datetime(2023, 7, 22, 16, 13, 56, 309920)
>>> delta = datetime.timedelta()
>>> delta
datetime.timedelta(0)
>>> now + delta
datetime.datetime(2023, 7, 22, 16, 13, 56, 309920)
>>> delta2 = datetime.timedelta(seconds=3600)
>>> delta2
datetime.timedelta(seconds=3600)
>>> now + delta2
datetime.datetime(2023, 7, 22, 17, 13, 56, 309920)
>>>
Gruß, noisefloor

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 15:55
von Pitwheazle
Vielleicht bin ich ja wirklich zu blöd. Dieses und auch andere Beispiele habe ich gelesen. Hier wird aber doch, wie ich es auch in meinem Programm gemacht habe, zu einem Zeitpunkt (now) jeweils ein Timedalta addiert. Mein Code

Code: Alles auswählen

gesamtzeit = datetime(1970,1,1,0,0,0)
....
dauer = g['zeit_sum']
seconds = int(dauer.total_seconds())
mm = int(seconds/60)
hh, mm = divmod(mm, 60)
dauer_text = f"{hh}:{mm:02d}" 
gesamtzeit = gesamtzeit + dauer 
...
gesamtzeit = gesamtzeit + dauer 
und das gebe ich weiter ans Template mit

Code: Alles auswählen

'gesamtzeit': gesamtzeit.time()
(stimmt "Gesamtzeit" ist nicht wirklich ein Zeitraum - speichert aber für mich den Zeitraum)... stehe ich da wieder auf dem Schlauch?

gesamtzeit = datetime.timedelta(0) geht jedenfalls nicht und ist ja so auch nicht vorgesehen.

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 16:35
von __blackjack__
@Pitwheazle: Warum sollte das nicht gehen? Und was ist daran nicht vorgesehen?

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 17:01
von Pitwheazle
Was mache ich falsch:
Bei mir erzeugt

Code: Alles auswählen

from datetime import date, datetime, timedelta
gesamtzeit = datetime.timedelta()  
die Fehlermeldung:

Code: Alles auswählen

type object 'datetime.datetime' has no attribute 'timedelta'

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 17:09
von Sirius3
Das ist eine Stolperstelle des datetime-Moduls, weil die Klasse genau gleich geschrieben wird.
Aber Du importierst doch schon timedelta:

Code: Alles auswählen

gesamtzeit = timedelta()

Re: Summen in Queryset bilden und an Template übergeben

Verfasst: Samstag 22. Juli 2023, 17:15
von Pitwheazle
Mann, mann, mann da muss man erst mal drauf kommen! Vielen Dank mal wieder dafür!