Datum -> Kalenderwoche -> Datum

17/12/2009 - 01:31 von Andreas Bruhn | Report spam
Hi allerseits,

mit der Methode isocalendar der Klasse datetime erhalte ich zu einem
Datum ein Tupel (Jahr, Kalenderwoche, Wochentag).

Aber wie funktioniert der Rückweg? Ich habe eine Kalenderwoche in
einem bestimmten Jahr und möchte nun das Datum des ersten Tages der
Woche (Montag) und des letzten Tages (Sonntag) haben.

Weil ich im datetime-Modul nicht fündig geworden bin, bin ich auf das
time-Modul ausgewichen und zu dem unten stehenden gekommen. Aber geht
das nicht auch einfacher?


#- *.py -
from datetime import datetime, timedelta
import time

akt_jahr, akt_kw, akt_tag = datetime.now().isocalendar()
montag = datetime.fromtimestamp(time.mktime(
time.strptime('1 %s %s' %
(akt_kw - 1, akt_jahr), '%w %U %Y')))
sonntag = datetime.fromtimestamp(time.mktime(
time.strptime('0 %s %s' %
(akt_kw, akt_jahr), '%w %U %Y')))
print 'Montag', montag
print 'Sonntag', sonntag
#- *.py -

Grüße,
Andreas
 

Lesen sie die antworten

#1 Peter Otten
17/12/2009 - 14:38 | Warnen spam
Andreas Bruhn wrote:

mit der Methode isocalendar der Klasse datetime erhalte ich zu einem
Datum ein Tupel (Jahr, Kalenderwoche, Wochentag).

Aber wie funktioniert der Rückweg? Ich habe eine Kalenderwoche in
einem bestimmten Jahr und möchte nun das Datum des ersten Tages der
Woche (Montag) und des letzten Tages (Sonntag) haben.

Weil ich im datetime-Modul nicht fündig geworden bin, bin ich auf das
time-Modul ausgewichen und zu dem unten stehenden gekommen. Aber geht
das nicht auch einfacher?



Nicht besonders einfach und nicht getestet, kommt aber ohne Umwege über
Strings aus:

from datetime import date, timedelta

def kwspan(year, week):
ref = date(year, 6, 6)
ref_week, ref_day = ref.isocalendar()[1:]

monday = ref + timedelta(days=7*(week-ref_week)-ref_day+1)
sunday = monday + timedelta(days=6)

assert monday.isocalendar() == (year, week, 1)
assert sunday.isocalendar() == (year, week, 7)

return monday, sunday

year, kw, day = date.today().isocalendar()
print kwspan(year, kw)

Peter

Ähnliche fragen