Compute the calender days given 2 dates

Discussion in 'C' started by srikanth_cforum, Dec 21, 2010.

  1. srikanth_cforum

    srikanth_cforum New Member

    Joined:
    Dec 21, 2010
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Dear friends,
    I am implementing a requirement on a microcontroller having a real time clock. When the controller is powered up, i capture the starting time to a static variable say begin = 20/12/2010 (ofcourse i will have 3 variables for month date and year.

    I want to calculate on demand, the number of days elapsed since power on.
    Since i am using a microcontroller, i do not have the flexibility of using the standard libraries (epoch time for example in linux).

    Can some one help me with this ? may be a code snippet or somestarting point would be great

    Cheers!
     
  2. imported_viswanathan

    imported_viswanathan New Member

    Joined:
    Dec 22, 2010
    Messages:
    2
    Likes Received:
    0
    Trophy Points:
    0
    Hi,
    i am giving the seudo code for it, Let me know if you face any further problem..

    Regards,
    Viswanathan.R
    9865650093
    rviswawt@gmail.com

    Code:
    #include<stdio.h>
    int main(void)
    {
    /* Store month information */
         int month[]={31,28,31,30,31,30,31,31,30,31,30,31};
    
    /* Get the current date and time OFF */
         int cu_date,cu_month,cu_year; 
    
    /* Get the previous date and time ON */
         int pre_date,pre_month,pre_year;
    
    /* Local Variable */
         int i,elap_days = 0; /* inital ellapsed days
    
    /* Get the date when it is powered on */	 
          printf("\n Enter the starting date \n When the Micro is powered on\n");
         scanf("%d/%d/%d",&pre_date,&pre_mont,&pre_year);
     
     /* Get the date when it powered off */
    	  printf("\n Enter the current date\n");
    	  scanf("%d/%d/%d",&cu_date,&cu_mont,&cu_year);
    	  
    	  /* Calculate  the number of days between the starting nad ending year */
    	for(i= cur_year+1;i<pre_year-1;i++)
    	{
    		if((cur_year+1)%4==0)
    		{
    			elap_days=elaps_days+366; /* Leap year*/
    		}
    		else
    			elap_days=elaps_days+365;
    	}
    
    	 	
    	if(cu_year==pre_year)
    	{
    		if(cu_month<=2) /* Iw was switched ON in Jan or FEB
    		{
    			if(cu_year%4 == 0)
    			month[1]=29;
    		}
    		for(i=cu_month+1;i<((cu_year==pre_year)? cu_month-1:12);i++)
    		{
    			elap_days= month[i]+elap_days;
    		}
    		if(cu_month == pre_month) /* if power on and OFF fall on the same month */
    		{
    			elap_days = cu_days-pre_day;
    		}
    		else
    		{
    			elap_days = (month[pre_month]-pre_day)+cu_day + elap_day;
    		}
    	} 
     
    	/* switch ON and OFF are falling in different years */
    		if(cu_year!=pre_year)
    		{
    			if(pre_month=>2)
    			{
    				if(pre_year%4 == 0)
    					month[1]=29;
    
    			}
    			for(i=0;i< cu_month-1;i++)
    			{
    				elap_days= month[i]+elap_days;
    			}
    			elap_days = elap_days+cur_days;
    
    		}
    print the elap_days
    return 0;
    
    }
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice