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()); }
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()); }
//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); }
bool Hit::is_valid() { if (valid_date(date)) { return true; } else { return false; } }
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; }
/*********************************************************************** * 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; }