C语言如何用一个函数getweek,传入两个参数,表示2023一个日期的月日,返回日期的星期
#include <stdio.h>
#include <time.h>
char *getweek(int month, int day)
{
struct tm timeinfo = {0};
timeinfo.tm_year = 2023 - 1900;
timeinfo.tm_mon = month - 1;
timeinfo.tm_mday = day;
time_t time_stamp = mktime(&timeinfo);
struct tm *local_time = localtime(&time_stamp);
static char week_name[10];
strftime(week_name, sizeof(week_name), "%A", local_time);
return week_name;
}
int main()
{
int month = 4, day = 25;
char *week = getweek(month, day);
printf("%d/%d/2023 is %s\n", month, day, week);
return 0;
}
#include <stdio.h>
// 判断是否是闰年,是返回1,不是返回0
int isLeapYear(int year) {
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 1;
}
return 0;
}
// 计算该日是该年的第几天
int getDayOfYear(int year, int month, int day) {
int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if(isLeapYear(year)) {
days[2] = 29;
}
int i, sum = 0;
for(i = 1; i < month; i++) {
sum += days[i];
}
sum += day;
return sum;
}
// 计算星期几,返回0-6,分别代表周日到周六
int getWeekday(int year, int month, int day) {
int days = getDayOfYear(year, month, day);
int weekday = (days + year - 1 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
return weekday;
}
// 测试
int main() {
int year, month, day;
printf("请输入日期(格式为YYYY-MM-DD):");
scanf("%d-%d-%d", &year, &month, &day);
int weekday = getWeekday(year, month, day);
switch(weekday) {
case 0: printf("星期日\n"); break;
case 1: printf("星期一\n"); break;
case 2: printf("星期二\n"); break;
case 3: printf("星期三\n"); break;
case 4: printf("星期四\n"); break;
case 5: printf("星期五\n"); break;
case 6: printf("星期六\n"); break;
default: printf("未知\n"); break;
}
return 0;
}