Berechnung aktuelle Kalenderwoche bis Kalenderwoche 52

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
nubie2001
User
Beiträge: 14
Registriert: Samstag 9. Januar 2010, 19:19

Hi

jemand ne Idee wie ich von der aktuellen Kalenderwoche bis zur letzten Kalenderwoche die Kalenderwoche berechne :D

Code: Alles auswählen

lt = localtime()
strftime("%W",lt)
so krieg ich ja die aktuelle Kalenderwoche und ab da muss ich die anderen ohne Rücklauf bis zum Jahresende berechnen.

Besten Dank.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hallo,

versuch' mal

Code: Alles auswählen

import datetime
today = datetime.date.today()
lastday = datetime.date(2010,12,31)
kw = lastday.isocalendar()[1] - today.isocalendar()[1]
Gruß
mutetella
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ein Jahr hat doch immer 52 Wochen oder nicht? Insofern wäre das eine einfache Subtraktion ;-)

Alternativ sollte das doch recht einfach sein, da Du Dir nur ein datetime-Object vom 31.12.YYYY erstellen musst:

Code: Alles auswählen

In [18]: present = datetime.now()

In [19]: last = datetime(present.year, 12, 31)

In [20]: last.strftime("%W")
Out[20]: '52'

In [21]: present.strftime("%W")
Out[21]: '16'

In [23]: int(last.strftime("%W")) - int(present.strftime("%W"))
Out[23]: 36
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hyperion hat geschrieben:Ein Jahr hat doch immer 52 Wochen oder nicht?
Eben nicht. Es gibt auch Jahre mit 53 KW's. Es gibt nur wenige verlässliche Größen bei Kalenderberechnungen...

Woher kommt datetime.now()?

Gruß
mutetella
lunar

@mutetella: "from datetime import datetime"

@Hyperion: Lies Wikipedia zu diesem Thema. Die "erste" Kalenderwoche eines Jahres ist nicht so trivial, wie der Name vermuten lässt.
nubie2001
User
Beiträge: 14
Registriert: Samstag 9. Januar 2010, 19:19

Danke erstmal so weit

und wie krieg ich des jetzt hin dass da inner Liste steht:

16
17
18
19
20
21
22
...
52
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Das steht z.B. im offiziellen Tutorial.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

nubie2001 hat geschrieben:und wie krieg ich des jetzt hin dass da inner Liste steht:
Indem zu Zeile 5 aus meinem Beispiel durch diese ersetzt:

Code: Alles auswählen

kw = range(today.isocalendar()[1], lastday.isocalendar()[1]-1)
bzw. ab Python 3.x

Code: Alles auswählen

kw = list(range(today.isocalendar()[1], lastday.isocalendar()[1]-1))
Gruß
mutetella
nubie2001
User
Beiträge: 14
Registriert: Samstag 9. Januar 2010, 19:19

jo danke habs schon selbst gelöst gehabt war recht easy

Code: Alles auswählen

todayweek = lastday.isocalendar()[1]
lastweek = today.isocalendar()[1]

for week in range(lastweek,todayweek+1):
                self.wfile.write('''<option>'''+str(week)+'''</option>''')
peter.stiehlmann
User
Beiträge: 3
Registriert: Dienstag 3. August 2021, 17:43

Wenn du in Python mit Datumswerten rechnen musst kann ich die Arrow Library empfehlen: https://arrow.readthedocs.io

Beispiel um einfach an die aktuelle Kalenderwoche zu kommen:

Code: Alles auswählen

arrow.utcnow().isoweekday()
Da Kalenderwochen Berechnen tricky sein kann, anschließen überprüfen ob das was raus kommt auch wirklich stimmt, denn eine KW beginnt nicht zwangsläufig am 01.01 und es gibt Jahre wie z.b. 2026 die 53 KWs haben.
Ich nutze dazu immer einen online Kalender wie diesen hier https://kwheute.de um zu prüfen ob die Werte die ich rausbekomme auch stimmen.
Möge der Code mit dir sein.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@peter.stiehlmann: `isoweekday()` ist der Wochentag, nicht die Kalenderwoche.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
peter.stiehlmann
User
Beiträge: 3
Registriert: Dienstag 3. August 2021, 17:43

Stimmt da war ich zu schnell, leider kann ich den Beitrag nicht editieren, korrekt wäre:

Code: Alles auswählen

arrow.utcnow().isocalendar()
=> (2019, 3, 6)
Der 2. Wert (Index 1) im Tuple wäre dann die "ISO week number".
Für diesen speziellen Fall braucht man nicht unbedingt arrow, aber wenn man mit dem Datumswerten weiter rumhantieren muss lernt man es schnell zu schätzen.
Möge der Code mit dir sein.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Naja so schnell warst du gar nicht, immer hin hast du auf einen Beitrag von vor 11 Jahren geantwortet :P
"When I got the music, I got a place to go" [Rancid, 1993]
peter.stiehlmann
User
Beiträge: 3
Registriert: Dienstag 3. August 2021, 17:43

Ich sollte eindeutig mehr schlafen :roll:
Möge der Code mit dir sein.
Antworten