Summen in Queryset bilden und an Template übergeben

Django, Flask, Bottle, WSGI, CGI…
Benutzeravatar
__blackjack__
User
Beiträge: 13199
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Du willst ja auch kein `datetime`-Objekt sondern ein `timedelta`-Objekt. Warum kannst Du das nicht erstellen?
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

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!
Benutzeravatar
__blackjack__
User
Beiträge: 13199
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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*.
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

__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.
Benutzeravatar
__blackjack__
User
Beiträge: 13199
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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*. 😱
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Benutzeravatar
noisefloor
User
Beiträge: 3875
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13199
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Warum sollte das nicht gehen? Und was ist daran nicht vorgesehen?
“There will always be things we wish to say in our programs that in all known languages can only be said poorly.” — Alan J. Perlis
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

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'
Sirius3
User
Beiträge: 17795
Registriert: Sonntag 21. Oktober 2012, 17:20

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()
Pitwheazle
User
Beiträge: 896
Registriert: Sonntag 19. September 2021, 09:40

Mann, mann, mann da muss man erst mal drauf kommen! Vielen Dank mal wieder dafür!
Antworten