单线程不太可能,但
strptime function可用于解析日期格式,并且可以在自动修改这些字段的系统(例如一些glibc实现)上为其tm_wday成员查询struct tm参数.
int get_weekday(char * str) {
struct tm tm;
memset((void *) &tm, 0, sizeof(tm));
if (strptime(str, "%d-%m-%Y", &tm) != NULL) {
time_t t = mktime(&tm);
if (t >= 0) {
return localtime(&t)->tm_wday; // Sunday=0, Monday=1, etc.
}
}
return -1;
}
或者你可以编码这些规则,在一个很长的单行中进行一些算术:
> 1900年1月1日是星期一.
>三十天有九月,四月,六月和十一月;其余的都有三十一个,节约了二月二十八日,有二十八个,下雨或闪耀,闰年二十九.
>闰年发生在任何一年可以被除以4,但不是在一个世纪,除非是可以被400整除.
编辑:请注意,此解决方案仅适用于UNIX时代(1970-01-01T00:00:00Z)之后的日期.