#!/usr/bin/env python import datetime import time def mkDateTime(dateString,strFormat="%Y-%m-%d"): # Expects "YYYY-MM-DD" string # returns a datetime object eSeconds = time.mktime(time.strptime(dateString,strFormat)) return datetime.datetime.fromtimestamp(eSeconds) def formatDate(dtDateTime,strFormat="%Y-%m-%d"): # format a datetime object as YYYY-MM-DD string and return return dtDateTime.strftime(strFormat) def mkFirstOfMonth2(dtDateTime): #what is the first day of the current month ddays = int(dtDateTime.strftime("%d"))-1 #days to subtract to get to the 1st delta = datetime.timedelta(days= ddays) #create a delta datetime object return dtDateTime - delta #Subtract delta and return def mkFirstOfMonth(dtDateTime): #what is the first day of the current month #format the year and month + 01 for the current datetime, then form it back #into a datetime object return mkDateTime(formatDate(dtDateTime,"%Y-%m-01")) def mkLastOfMonth(dtDateTime): dYear = dtDateTime.strftime("%Y") #get the year dMonth = str(int(dtDateTime.strftime("%m"))%12+1)#get next month, watch rollover dDay = "1" #first day of next month nextMonth = mkDateTime("%s-%s-%s"%(dYear,dMonth,dDay))#make a datetime obj for 1st of next month delta = datetime.timedelta(seconds=1) #create a delta of 1 second return nextMonth - delta #subtract from nextMonth and return if __name__=="__main__": for i in range(12): thisMonth = ("0%i"%(i+1,))[-2:] print thisMonth d = mkDateTime("2004-%s-02"%thisMonth) print formatDate(d) print formatDate(d,"%Y%m%d") print mkFirstOfMonth(d) print mkFirstOfMonth2(d) print mkLastOfMonth(d)