[Python] Hoeveelste weekdag van de maand is het?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • jocmeh
  • Registratie: Juni 2005
  • Laatst online: 21-02-2024
Voor een omroeporganisatie probeer ik het uitzendschema volgens de structuur 'programma op 3e woensdag van de maand' om te zetten in een automatische programmagids.

Nu zit ik vast op het punt dat ik moet weten of het vandaag de 1e, 2e, 3e, 4e of 5e ma/di/wo/do/vr/za/zo van de maand is.

Ben hiermee begonnen:
code:
1
2
3
4
5
weeks = calendar.monthcalendar(today.year, today.month)
if(today.day in weeks[0]):
    week = '1'
elif(today.day in weeks[1]):
    week = '2'


Etc. Maar dan kijk je alleen of vandaag in de hoeveelste week van de maand zit, en niet de hoeveelste keer is dat deze dag voorkomt in de maand...

Verder heb ik zitten kijken naar dateutil, maar dat is vooral gericht op het omgekeerde: de datum vinden bij de 3e woensdag in maand X. En de datum weten we wel (want dat is vandaag of morgen).

Nou hoop ik heel erg dat iemand zoiets al eens bij de hand heeft gehad, want ik zie het even niet meer.

[ Voor 5% gewijzigd door jocmeh op 11-02-2011 16:38 ]


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Als je de dag in de maand deelt door 7, de rest weggooit en er 1 bij op telt, dan weet je op de "hoeveelste" je bent.

Dus vrijdag 11 februari 2011 is de floor(11/7)+1=2e vrijdag in februari.
Woensdag 23 februari 2011 is de floor(23/7)+1=4e woensdag in februari.

[ Voor 21% gewijzigd door HuHu op 11-02-2011 16:44 ]


Acties:
  • 0 Henk 'm!

  • jocmeh
  • Registratie: Juni 2005
  • Laatst online: 21-02-2024
Oh wow. Dat is ergens best logisch eigenlijk.


code:
1
2
>>> int(math.floor(datetime.date.today().day/7)+1)
2


\o/

Heel erg bedankt HuHu!

Acties:
  • 0 Henk 'm!

  • Koetjeboe
  • Registratie: Maart 2002
  • Nu online

Koetjeboe

Boe, zegt de koe

HuHu schreef op vrijdag 11 februari 2011 @ 16:43:
Als je de dag in de maand deelt door 7, de rest weggooit en er 1 bij op telt, dan weet je op de "hoeveelste" je bent.

Dus vrijdag 11 februari 2011 is de floor(11/7)+1=2e vrijdag in februari.
Woensdag 23 februari 2011 is de floor(23/7)+1=4e woensdag in februari.
Dat klopt zowiezo niet toch? Tegenvoorbeeld: 7 feb 2011 (maandag). 7/7+1 = 2 != 1

Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Koetjeboe schreef op vrijdag 11 februari 2011 @ 16:55:
[...]

Dat klopt zowiezo niet toch? Tegenvoorbeeld: 7 feb 2011 (maandag). 7/7+1 = 2 != 1
Hmm... dan moest het: floor( (dag - 1) / 7) + 1 zijn. Je moet wisselen tussen wel en niet bij 0 beginnen met tellen.

Acties:
  • 0 Henk 'm!

  • jocmeh
  • Registratie: Juni 2005
  • Laatst online: 21-02-2024
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> int(floor((datetime.date(2011, 2, 1).day-1)/7)+1)
1
>>> int(floor((datetime.date(2011, 2, 7).day-1)/7)+1)
1
>>> int(floor((datetime.date(2011, 2, 8).day-1)/7)+1)
2
>>> int(floor((datetime.date(2011, 2, 14).day-1)/7)+1)
2
>>> int(floor((datetime.date(2011, 2, 15).day-1)/7)+1)
3
>>> int(floor((datetime.date(2011, 2, 22).day-1)/7)+1)
4
>>> int(floor((datetime.date(2011, 1, 31).day-1)/7)+1)
5


:Y

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:22
Je bent nu eigenlijk omhoog aan het afronden, dus kun je net zo goed ceil(dag/7) schrijven (in Python 3). Of als je liever met integers werkt, kun je de integer division operator (//) gebruiken, want die rondt impliciet naar beneden af (dus floor((dag - 1)/7) + 1 == (dag - 1)//7 + 1 == (dag + 6)//7).

Acties:
  • 0 Henk 'm!

  • ThaStealth
  • Registratie: Oktober 2004
  • Laatst online: 30-09 12:22
Nvm rekenfout

[ Voor 183% gewijzigd door ThaStealth op 11-02-2011 19:55 ]

Mess with the best, die like the rest

Pagina: 1