Pages - Menu

Monday 8 October 2012

Finding date given the day of the year in C

The following function computes and returns the date based on the year and the day of the year received as arguments in the function call.

You can read more about the function used for checking if the given year is a leap year by reading this article: Leap year checking algorithm in C


You can find the function that does the opposite conversion by reading Finding day of the year  given the date in C
/*
 * Description:
 *  Computes and returns the date
 * Parameters:
 *  day  - the day of the year
 *  year - the year
 * Returns:
 *  date - the corresponding date
 */
char *DayToDate(int day, int year)
{
    int noDays[] = {31,28,31,30,31,30,31,31,30,31,30,31};//number of days of each month
    int days[12];//each of its elements represents the number of days of the first i months
    int isLeapYear = 0, i = 0, d = 0;
    char *date;
    date = (char*)malloc(sizeof(char)*30);
    isLeapYear = LeapYear(year);//checking if the year is a leap year
    if(isLeapYear == 1)
    {
        noDays[1] = 29;
    }
    if(day>31)//the day is not in January
    {
        for(i=0; i<12 && count<day; i++)
        {
            if(i == 0)
            {
                days[0] = noDays[0];
            }
            else
            {
                days[i] = days[i-1] + noDays[i];
            }
        }
        d = day - days[i-2];
        itoa(d,date,10);
        switch(i)
        {
        case 2:
            strcat(date," February");
            break;
        case 3:
            strcat(date," March");
            break;
        case 4:
            strcat(date," April");
            break;
        case 5:
            strcat(date," May");
            break;
        case 6:
            strcat(date," June");
            break;
        case 7:
            strcat(date," July");
            break;
        case 8:
            strcat(date," August");
            break;
        case 9:
            strcat(date," September");
            break;
        case 10:
            strcat(date," October");
            break;
        case 11:
            strcat(date," November");
            break;
        case 12:
            strcat(date," December");
            break;
        }
    }
    else//the day is in January
    {
        itoa(day,date,10);
        strcat(date," January");
    }
    return date;
}


Example:
This C program takes a year and the day of the year and, using the function defined above, prints the corresponding date.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

int LeapYear(int year);
char *DayToDate(int day, int year);

int main(void)
{
    int year = 0, day = 0;
    char *date;
    date = (char*)malloc(sizeof(char)*6);
    printf("\n Enter the year: ");
    scanf("%d",&year);
    printf(" Enter the day of year: ");
    scanf("%d",&day);
    date = DayToDate(day,year);
    printf("\n\tThe date is: %s",date);
    getch();
    return 0;
}

Output:  
The 68th day of 2012 is the 8th of March.

No comments:

Post a Comment