2020-05-08 01:47 AM
2020-05-08 02:20 AM
Put the date entered by the user in a struct tm, and check it with mktime(). It will normalize the date and time, e.g. 35th of May becomes 4th of June, so if there are any differences, then the input parameter was an invalid date.
#include <time.h>
void check_time(struct tm *a) {
struct tm b;
b = *a;
mktime(&b);
if(a.tm_year != b.tm_year) {
warning("year is invalid");
}
/* and so on for all fields except tm_wday, tm_yday and tm_isdst */
}
Mind the peculiarities of struct tm
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};
2020-05-08 02:20 AM
Put the date entered by the user in a struct tm, and check it with mktime(). It will normalize the date and time, e.g. 35th of May becomes 4th of June, so if there are any differences, then the input parameter was an invalid date.
#include <time.h>
void check_time(struct tm *a) {
struct tm b;
b = *a;
mktime(&b);
if(a.tm_year != b.tm_year) {
warning("year is invalid");
}
/* and so on for all fields except tm_wday, tm_yday and tm_isdst */
}
Mind the peculiarities of struct tm
struct tm {
int tm_sec; /* Seconds (0-60) */
int tm_min; /* Minutes (0-59) */
int tm_hour; /* Hours (0-23) */
int tm_mday; /* Day of the month (1-31) */
int tm_mon; /* Month (0-11) */
int tm_year; /* Year - 1900 */
int tm_wday; /* Day of the week (0-6, Sunday = 0) */
int tm_yday; /* Day in the year (0-365, 1 Jan = 0) */
int tm_isdst; /* Daylight saving time */
};