C语言如何用一个函数返回一个日期的月日

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;
}
  • 以下回答由chatgpt基于相关博客总结生成:
    #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;
    }