#!/usr/bin/env jython from java.util import GregorianCalendar, Calendar from java.text import SimpleDateFormat class SaneCalendar(GregorianCalendar): def __init__(self): GregorianCalendar.__init__(self) def strptime(self,initStr,initFrmt): frmt = SimpleDateFormat(initFrmt) self.setTime(frmt.parse(initStr)) def setDate(self,year,month,day=1,hour=None,minute=None,seconds=None): if hour: self.set(year,month-1,day,hour,minute,seconds) else: self.set(year,month-1,day) def getMonth(self): """java.util.Calendar has totally brain-damaged counting of months from 0, so for example May is 4.""" return self.get(Calendar.MONTH)+1 def setMonth(self,mnth): self.set(Calendar.MONTH,mnth-1) def end_of_month(self): """Shamelessly stolen from http://groups.google.com/group/comp.lang.python/msg/46a3836d5142e31b""" year_inc, month_inc = divmod(self.getMonth(), 12) internDate = self internDate.add(Calendar.YEAR,year_inc) internDate.setMonth(month_inc+1) internDate.set(Calendar.DAY_OF_MONTH,1) internDate.setLenient = True internDate.add(Calendar.DAY_OF_MONTH,-1) return internDate def isWorkday(self): wday = self.get(Calendar.DAY_OF_WEEK) return((wday <= self.FRIDAY) and (wday >= self.MONDAY)) def __str__(self): return "%s-%s-%s" % (self.get(Calendar.YEAR),self.getMonth(), self.get(Calendar.DAY_OF_MONTH)) if __name__ == "__main__": cal = MyCalendar() print str(cal.end_of_month())