435,627 Members | 1,188 Online
Need help? Post your question and get tips & solutions from a community of 435,627 IT Pros & Developers. It's quick & easy.

# Creating a list of Mondays for a year

 P: n/a Is there a way to make python create a list of Mondays for a given year? For example, mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] Sep 18 '05 #1
9 Replies

 P: n/a Chris> Is there a way to make python create a list of Mondays for a Chris> given year? For example, Chris> mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', Chris> '1/31/2005','2/7/2005', ... ] How about: import datetime oneday = datetime.timedelta(days=1) oneweek = datetime.timedelta(days=7) year = 2005 start = datetime.date(year=year, month=1, day=1) while start.weekday() != 0: start += oneday days = [] while start.year == year: days.append(start) start += oneweek print days Skip Sep 18 '05 #2

 P: n/a Chris wrote: Is there a way to make python create a list of Mondays for a given year? For example, mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] from datetime import date, timedelta def mondays(year): '''generate all days that are Mondays in the given year''' jan1 = date(year, 1, 1) # find first Monday (which could be this day) monday = jan1 + timedelta(days=(7-jan1.weekday()) % 7) while 1: if monday.year != year: break yield monday monday += timedelta(days=7) [str(x) for x in mondays(2005)] ['2004-01-05', '2004-01-12', ... '2004-12-27'] Extension to support any day of the week (including renaming the function!) is left as an exercise to the reader. ;-) -- Peter Sep 18 '05 #3

 P: n/a "Chris" wrote: Is there a way to make python create a list of Mondays for a given year? For example, mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] Get the dateutil package (https://moin.conectiva.com.br/DateUtil): import dateutil.rrule as rrule from datetime import date mondays2005 = tuple(rrule.rrule(rrule.WEEKLY, dtstart=date(2005,1,1), count=52, byweekday=rrule.MO)) George Sep 18 '05 #4

 P: n/a Consider also dateutil written by Gustavo Niemeyer and found at: https://moin.conectiva.com.br/DateUtil from dateutil.rrule import * list(rrule(WEEKLY, byweekday=MO, dtstart=date(2005,1,1), until=date(2005,12,31))) The library may be a little intimidating at first it is worth learning. waldek Sep 18 '05 #5

 P: n/a George Sakkis wrote: "Chris" wrote:Is there a way to make python create a list of Mondays for a given year? Get the dateutil package (https://moin.conectiva.com.br/DateUtil): import dateutil.rrule as rrule from datetime import date mondays2005 = tuple(rrule.rrule(rrule.WEEKLY, dtstart=date(2005,1,1), count=52, byweekday=rrule.MO)) Count should probably be at least "53" to catch the years when there are that many Mondays.... such as 2001. Unfortunately, I suspect that will screw it up for other years where there are only 52 (but I don't know this dateutil package so someone who does would have to say for sure). -Peter Sep 19 '05 #6

 P: n/a Chris writes: Is there a way to make python create a list of Mondays for a given year? mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] This is pretty inefficient but it's conceptually the simplest: def mondays(year): from calendar import weekday, monthrange return [('%d/%d/%d'%(month,day,year)) for month in xrange(1,13) for day in xrange(1,1+monthrange(year,month)[1]) if weekday(year,month,day) == 0] Sep 19 '05 #7

 P: n/a "Peter Hansen" wrote: George Sakkis wrote: "Chris" wrote:Is there a way to make python create a list of Mondays for a given year? Get the dateutil package (https://moin.conectiva.com.br/DateUtil): import dateutil.rrule as rrule from datetime import date mondays2005 = tuple(rrule.rrule(rrule.WEEKLY, dtstart=date(2005,1,1), count=52, byweekday=rrule.MO)) Count should probably be at least "53" to catch the years when there are that many Mondays.... such as 2001. Unfortunately, I suspect that will screw it up for other years where there are only 52 (but I don't know this dateutil package so someone who does would have to say for sure). -Peter Sorry, my bad; waldek in the post below got it right. Here's yet another way that doesn't use the count or until keywords: from itertools import takewhile mondays2001 = tuple(takewhile(lambda d: d.year==2001, rrule.rrule(rrule.WEEKLY, dtstart=date(2001,1,1), byweekday=rrule.MO))) print len(mondays2001) 53 George Sep 19 '05 #8

 P: n/a Thanks to everyone for your help! That fit the need perfectly. In article , se***@yahoo.com says... Is there a way to make python create a list of Mondays for a given year? For example, mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] Sep 19 '05 #9

 P: n/a On Mon, 19 Sep 2005 12:10:04 GMT, Chris wrote: Thanks to everyone for your help! That fit the need perfectly. In article , se***@yahoo.com says... Is there a way to make python create a list of Mondays for a given year? For example, mondays = ['1/3/2005','1/10/2005','1/17/2005','1/24/2005', '1/31/2005','2/7/2005', ... ] You can also calculate it using the Julian Day Number. Google on astronomical calculations, or read the introduction to one of the Numerical Recipies. . . books for a discussion and algorithm. Sep 19 '05 #10

### This discussion thread is closed

Replies have been disabled for this discussion.