Beispiel #1
0
    void Date::add_month (int n) {

        // Negative
        if(n < 0)
        {
            int tmp = month();
            this->m = tmp - abs(n) > 0 ? tmp - abs(n) : 12 - abs(n + tmp) % 12;
            if(n + tmp <= 0) {
                this->y -= (1 + floor(abs(n + tmp)/12));
            }
        } else {
            int months = abs(n) + month();
            if(months % 12 != 0)
                this->m = months % 12;
            else
                this->m = 12;

            if(months > 12 && months % 12 != 0) {
                this->y += months / 12;
            } else if (months > 12) {
                this->y += months / 12 - 1;
            }
        }

        if(!valid_date(year(), month(), day())) {
            this->d = days_this_month();
        }

        this->julian_day_number = calc_julian_day_number(year(), month(), day());
    }
Beispiel #2
0
 void Date::add_year (int n) {
     this->y += n;
     if(!valid_date(year(), month(), day())) {
         this->d = days_this_month();
     }
     this->julian_day_number = calc_julian_day_number(year(), month(), day());
 }
Beispiel #3
0
//Receives input string, parses it for a date, returns 1 if valid, 0 if not
int parse_date(char* date_string, int* days, int* months, int* years) {
	int len =0;
	len = strlen(date_string);
	if (len !=8) {
		return 0;
	}
	if (date_string[2]!= '/' || date_string[5] != '/') {
		return 0;	
	}
	//days
	if ( !is_num(date_string[0]) || !is_num(date_string[1])) {
		return 0;
	}
	//months
	if ( !is_num(date_string[3]) || !is_num(date_string[4]) ) {
		return 0;
	}
	//years
	if ( !is_num(date_string[6]) || !is_num(date_string[7]) ) {	
		return 0;
	}
	*days = ((int)date_string[0]-'0' )*10+(int)(date_string[1]-'0'); 
	*months = ((int)date_string[3]-'0' )*10+(int)(date_string[4]-'0');
	*years = ((int)date_string[6]-'0' )*10+(int)(date_string[7]-'0'); 	
	return valid_date(*days, *months, *years);

}
Beispiel #4
0
bool Hit::is_valid() {

  if (valid_date(date)) {
    return true;
  }
  else {
    return false;
  }
}
Beispiel #5
0
void check(int day,int month,int year)
{
	int ans;
		ans = valid_date(day, month, year);
		if (ans == 1)
		{
			date(day, month, year);
		}
		else
			printf("INVALID");
}
int isOlder(char *dob1, char *dob2) 
{
	int day1=0, day2=0, mon1=0, mon2, yea1, yea2, vali1, vali2;
	day1 = (((int)dob1[0]) - 48) * 10 + (int)dob1[1] - 48;;
	day2 = (((int)dob2[0])-48) * 10 + (int)dob2[1]-48;
	mon1 = (((int)dob1[3])-48) * 10 + (int)dob1[4]-48;
	mon2 = (((int)dob2[3])-48) * 10 + (int)dob2[4]-48;
	yea1= (((int)dob1[6])-48) * 1000 + (((int)dob1[7])-48) * 100 + (((int)dob1[8])-48) * 10 +((int)dob1[9])-48;
	yea2 = (((int)dob2[6])-48) * 1000 + (((int)dob2[7])-48) * 100 + (((int)dob2[8])-48) * 10 + ((int)dob2[9])-48;
	vali1 = valid_date(day1, mon1, yea1);
	vali2 = valid_date(day2, mon2, yea2);
	if (vali1 != 0 && vali2 != 0)
	{
		if (yea1 > yea2)
			return 2;
		else if (yea1 < yea2)
			return 1;
		else
		{
			if (mon1 > mon2)
				return 2;
			else if (mon1 < mon2)
				return 1;
			else
			{
				if (day1 > day2)
					return 2;
				else if (day1 < day2)
					return 1;
				else
					return 0;
			}

		}
			return 0;
	} 
	else
	   return -1;
}
Beispiel #7
0
/***********************************************************************
* function	:	date_to_int()
* purpose	:	converts a date string in dd/mm/yyyy format in integer
* argument	:
*	— char *str	: the string to be converted
* return	: a positive integer value if successful
* notes		:
*	— returns the return value of valid_date()
***********************************************************************/
int date_to_int(char *str){

	int index, vld_puncts = 0, day, month, year;
	char *token, tmp[BUFSIZ];
	/***********************************************************************
	*	index		->	index on str position
	*	date_ret	->	integer date returned in yyyy/mm/dd
	*	token		->	part of initial str when use strtok()
	***********************************************************************/

	/*
	*	Check if string is in valid format
	*/
	for (index = 0; index < strlen(str); index++){
		if (isalpha(str[index])){
			printf("\a Your input should NOT contain any letters");
			return 0;
		}
		if (ispunct(str[index]) && str[index] != '/'){
			printf("\a Your input is NOT in valid format. Seperate values with '/' symbols");
			return 0;
		}
		else if (ispunct(str[index]) && str[index] == '/')
			vld_puncts++;
	}
	if (vld_puncts != 2)
		return 0;

	strcpy(tmp, str);

	token = strtok(tmp, "/");
	day = atoi(token);
	token = strtok(NULL, "/");
	month = atoi(token);
	token = strtok(NULL, "/");
	year = atoi(token);

	return(valid_date(day, month, year));
}
date * date_create(int year, int month, int day) 
{
    if (!valid_date(year, month, day))
        return NULL;

    for (int i = 0; i != date_pool_size; i++) 
    {
        if (!date_pool[i].allocated) 
        {
            date_pool[i] = (date) 
            {
                .allocated = true,
                .year = year,
                .month = month,
                .day = day
            };
            return &date_pool[i];
        }
    }

    return NULL;
}