Date Addition

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • heiro
    New Member
    • Jul 2007
    • 56

    Date Addition

    Hi,

    how can I add calendar days in which it will exclude sundays?

    ex: date today is MAY 1 then i will add 6 days, so it will return MAY 8 since sunday was excluded..

    thanks guys....
  • jlm699
    Contributor
    • Jul 2007
    • 314

    #2
    This is crude and done quick and dirty but here's an idea to get you started:
    [code=python]
    >>> import datetime
    >>> dt = datetime.date(2 008, 5, 1)
    >>> delta = 6
    >>> if dt.weekday() > 7 - delta:
    ... delta += ( ( delta / 7 ) + [0, 1][bool(delta % 7)] )
    ...
    >>> dt + datetime.timede lta(delta)
    datetime.date(2 008, 5, 8)
    >>> delta = 20
    >>> if dt.weekday() > 7 - delta:
    ... delta += ( ( delta / 7 ) + [0, 1][bool(delta % 7)] )
    ...
    >>> dt + datetime.timede lta(delta)
    datetime.date(2 008, 5, 24)
    >>> [/code]
    That's not perfect but it's very close... only a minor modification to fix

    Comment

    • heiro
      New Member
      • Jul 2007
      • 56

      #3
      Originally posted by jlm699
      This is crude and done quick and dirty but here's an idea to get you started:
      [code=python]
      >>> import datetime
      >>> dt = datetime.date(2 008, 5, 1)
      >>> delta = 6
      >>> if dt.weekday() > 7 - delta:
      ... delta += ( ( delta / 7 ) + [0, 1][bool(delta % 7)] )
      ...
      >>> dt + datetime.timede lta(delta)
      datetime.date(2 008, 5, 8)
      >>> delta = 20
      >>> if dt.weekday() > 7 - delta:
      ... delta += ( ( delta / 7 ) + [0, 1][bool(delta % 7)] )
      ...
      >>> dt + datetime.timede lta(delta)
      datetime.date(2 008, 5, 24)
      >>> [/code]
      That's not perfect but it's very close... only a minor modification to fix


      yeah much thanks for this.. i will do some modification..

      Comment

      • kaarthikeyapreyan
        New Member
        • Apr 2007
        • 106

        #4
        Hey try this one !! hope this suits your requirement
        I had a workaround with the time module

        Code:
        import time
        import string ,sys
        
        class workalday:
            
            def __init__(self):
        
                self.secperday=86400
                
            def addtime(self):
                """ Computations with epoch time working with dates after 1970"""
                
                print "Provide with date in format dd/mm/yyyy to compute Number of sundays till then "
                sys.stderr.write("Else provide with number of days for computation: ")
                self.uinput=raw_input()
                if '/' in self.uinput :
                    self.fomats(1)
                else :
                    print ("Computation for %s days from present date" %self.uinput)
                    self.fomats(2)
                    print ("Expected %d/%d/%d"%(self.lastdate,self.lastmonth,self.lastyear))
        
            def deadday(self,dd):
                """ Computation of sundays"""
                updatetime = 0
                sdays = int(dd)
                for i in range(sdays):
                    updatetime = updatetime + self.secperday
                    if time.localtime(self.presentsec + updatetime)[6] == 6:
                        sdays = sdays + 1
                
                return sdays
                
            def fomats(self,state):
                
                """ Compute the sec and formated dates from actual to specified"""
                self.presentsec = time.time()
                self.pform= time.localtime()
                if state == 2 :
                    """ If number of days specified"""
                    sunday =  self.deadday(self.uinput)
                    self.display(sunday)
                    
                if state == 1 :
                    """ If date computations specified to date"""
                    frdate=string.split(self.uinput,'/')
                    consdate = tuple([int(frdate[2]),int(frdate[1]),int(frdate[0]),self.pform[3],self.pform[4],self.pform[5],self.pform[6],self.pform[7],self.pform[8]])
                    finsec = time.localtime(time.mktime(consdate))
                    diffdays =  int(round((time.mktime(consdate) - self.presentsec ) / self.secperday))
                    sunday =  self.deadday(diffdays)
                    print ("The Number of sundays that will be excuded: %d" %sunday)
                    
            def display(self,sdays):
        
                self.lastyear = time.localtime(self.presentsec + (sdays*self.secperday))[0]
                self.lastmonth  = time.localtime(self.presentsec + (sdays*self.secperday))[1]
                self.lastdate = time.localtime(self.presentsec + (sdays*self.secperday))[2]
                
        if __name__=='__main__':
            
            obj = workalday()
            obj.addtime()

        Comment

        Working...