Finding specific date ranges

kyosohma at gmail.com kyosohma at gmail.com
Thu Sep 6 13:29:19 EDT 2007


On Sep 6, 10:57 am, Tim Golden <m... at timgolden.me.uk> wrote:
> kyoso... at gmail.com wrote:
> > Hi,
>
> > I am working on a timesheet application in which I need to to find the
> > first pay period in a month that is entirely contained in that month
> > to calculate vacation time. Below are some example date ranges:
>
> > December 31, 2006    January 13, 2007 # doesn't earn
> > January 14, 2007   January 27, 2007 # does earn
> > January 28, 2007   February 10, 2007 # doesn't
> > February 11, 2007  February 24, 2007 # does
>
> > So far, the best approach I've come up with is to create a list of
> > tuples that contain the pay period date ranges for the year and
> > iterate through the tuples looking for the first occurrence of the
> > month names matching. Then I'd add that date range to a separate list
> > and somehow ignore any other matches in that month. This seems like a
> > hack. Does anyone have a better idea?
>
> Well, I can come up with a solution which basically reflects the
> way I'd do it in SQL (since this kind of thing is my bread-and-butter
> there) but I'm not convinced it's really any better than your proposal.
> However, for the purposes of illustration:
>
> <code>
> import calendar
> import datetime
>
> YEAR = 2007
>
> months = [
>    (datetime.date (YEAR, n, 1), datetime.date (YEAR, n, calendar.monthrange (YEAR, n)[1]))
>    for n in range (1, 13)
> ]
>
> periods = [
>    (datetime.date(2006, 12, 31), datetime.date(2007, 1, 13)),
>    (datetime.date(2007, 1, 14), datetime.date(2007, 1, 27)),
>    (datetime.date(2007, 1, 28), datetime.date(2007, 2, 10)),
>    (datetime.date(2007, 2, 11), datetime.date(2007, 2, 24))
> ]
>
> for m in months:
>    candidate_periods = [p for p in periods if m[0] <= p[0] and p[1] <= m[1]]
>    if candidate_periods:
>      print m[0], "=>", min (candidate_periods)
>    else:
>      print m[0], "=>", "no period matches"
>
> </code>
>
> TJG

Thanks! I'll try it both ways and see if there's any appreciable
difference in speed, although since it will be packaged into an
executable, that may not be an issue anyway.

Mike




More information about the Python-list mailing list