Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Creating a list of Mondays for a year

Reply
Thread Tools

Creating a list of Mondays for a year

 
 
Chris
Guest
Posts: n/a
 
      09-18-2005
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', ... ]

 
Reply With Quote
 
 
 
 
skip@pobox.com
Guest
Posts: n/a
 
      09-18-2005

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
 
Reply With Quote
 
 
 
 
Peter Hansen
Guest
Posts: n/a
 
      09-18-2005
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
 
Reply With Quote
 
George Sakkis
Guest
Posts: n/a
 
      09-18-2005
"Chris" <(E-Mail Removed)> 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

 
Reply With Quote
 
waldemar.osuch@gmail.com
Guest
Posts: n/a
 
      09-18-2005
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

 
Reply With Quote
 
Peter Hansen
Guest
Posts: n/a
 
      09-19-2005
George Sakkis wrote:
> "Chris" <(E-Mail Removed)> 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
 
Reply With Quote
 
Paul Rubin
Guest
Posts: n/a
 
      09-19-2005
Chris <(E-Mail Removed)> 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]
 
Reply With Quote
 
George Sakkis
Guest
Posts: n/a
 
      09-19-2005
"Peter Hansen" <(E-Mail Removed)> wrote:

> George Sakkis wrote:
> > "Chris" <(E-Mail Removed)> 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

 
Reply With Quote
 
Chris
Guest
Posts: n/a
 
      09-19-2005
Thanks to everyone for your help!

That fit the need perfectly.

In article <(E-Mail Removed)>,
http://www.velocityreviews.com/forums/(E-Mail Removed) 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', ... ]
>
>

 
Reply With Quote
 
Charles Krug
Guest
Posts: n/a
 
      09-19-2005
On Mon, 19 Sep 2005 12:10:04 GMT, Chris <(E-Mail Removed)> wrote:
> Thanks to everyone for your help!
>
> That fit the need perfectly.
>
> In article <(E-Mail Removed)>,
> (E-Mail Removed) 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.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Calendar control to display image on Mondays =?Utf-8?B?RGF2aWQ=?= ASP .Net 2 01-19-2006 03:09 AM
I Hate Mondays Dennis Gordon Windows 64bit 3 11-15-2005 02:27 PM
TheDigitalReview: CONTEST - Mondays in the Sun DVD Mike McGee DVD Video 0 12-19-2003 08:18 AM
TheDigitalReview: CONTEST - Mondays in the Sun DVD Promotion Mike McGee DVD Video 0 12-09-2003 12:13 AM
TheDigitalReview: MONDAYS IN THE SUN - DVD REVIEW Mike McGee DVD Video 0 12-09-2003 12:04 AM



Advertisments