Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datum -> Kalenderwoche -> Datum

635 views
Skip to first unread message

Andreas Bruhn

unread,
Dec 16, 2009, 7:31:08 PM12/16/09
to
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

Peter Otten

unread,
Dec 17, 2009, 8:38:19 AM12/17/09
to
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

Andreas Bruhn

unread,
Dec 17, 2009, 12:43:53 PM12/17/09
to
Hi allerseits,

am Thu, 17 Dec 2009 01:31:08 +0100 schrieb ich:

> 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.

vergesst es. Gestern abend war ich wohl zu bl�d, blind oder abgelenkt.

Heute vormittag auf dem Weg zum Kunden ist mir eine Idee gekommen und
nun bin ich bei

montag = datetime.strptime('1 %s %s' % (akt_kw-1, akt_jahr),
'%w %U %Y')
sonntag = datetime.strptime('0 %s %s' % (akt_kw, akt_jahr),
'%w %U %Y')

gelandet. So passt es...

Tsch��,
Andreas

Andreas Bruhn

unread,
Dec 17, 2009, 1:23:36 PM12/17/09
to
Am Thu, 17 Dec 2009 14:38:19 +0100 schrieb Peter Otten:

> 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)

Die Montags-Berechnung ist mir jetzt etwas suspekt (nur draufschauen
hilft mir da nicht, m�sste ich mal laufen lassen um es zu verstehen),
aber auf die Sonntags-Berechnung h�tte ich ja nun auch selbst kommen
k�nnen. :-(

Mist, ich brauche mal andere Kunden/Projekte. Ich programmiere viel zu
wenig mit Python. :-((

Danke,
Andreas

0 new messages