Need Help comparing dates

Tim Chase python.list at tim.thechases.com
Thu Jun 15 21:29:09 EDT 2006


> I am new to Python and am working on my first program. I am trying to
> compare a date I found on a website to todays date. The problem I have
> is the website only shows 3 letter month name and the date.
> Example: Jun 15

No year, right?  Are you making the assumption that the year is 
the current year?

> How would I go about comparing that to a different date? 

Once you've got them as dates,

 >>> from datetime import date

you can just compare them as you would any other comparable items.

If you need to map the month-strings back into actual dates, you 
can use this dictionary:

 >>> month_numbers = dict([(date(2006, m, 1).strftime("%b"), m) 
for m in range(1,13)])

It happens to be locale specific, so you might have to tinker a 
bit if you're mapping comes out differently from what the website 
uses.  I also made the assumption the case was the same (rather 
than trying to normalize to upper/lower case)

Then, you can use

 >>> webpageDateString = "Mar 21"
 >>> webMonth, webDay = webpageDateString.split()
 >>> month = m[webMonth]
 >>> day = int(webDay)
 >>> webpageDate = date(date.today().year, month, day)
 >>> compareDate = date.today()
 >>> compareDate < webpageDate
False
 >>> compareDate > webpageDate
True

You can wrap the load in a function, something like

 >>> def isNewer(dateString, year = date.today().year):
...     monthString, dayString = dateString.split()
...     month = month_numbers[monthString]
...     day = int(dayString)
...     return date.today() < date(year, month, day)

which will allow you to do

 >>> isNewer("Jul 1")
True
 >>> isNewer("Apr 1")
False

and the like.

There's plenty of good stuff in the datetime module.

-tkc







More information about the Python-list mailing list