C语言实现日期转换:将2020年计数转换为年、月、日、星期

本代码实现将2020年1月1日作为计数起点(计数1),将2020年12月31日作为计数终点(计数366),通过输入1~366之间的数值,转换为年、月、日、星期并输出。

#include <stdio.h>

typedef struct {
    int year;
    int month;
    int day;
    int week;
} Date;

int isLeapYear(int year) {
    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
        return 1;
    } else {
        return 0;
    }
}

void convertToDate(int count, Date *date) {
    date->year = 2020;
    
    int monthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    if (isLeapYear(date->year)) {
        monthDays[1] = 29;
    }
    
    int i;
    for (i = 0; i < 12; i++) {
        if (count <= monthDays[i]) {
            date->month = i + 1;
            date->day = count;
            break;
        }
        count -= monthDays[i];
    }
    
    int startWeek = 3;  // 2020年1月1日星期三
    date->week = (startWeek + count - 1) % 7;
}

void printDate(Date date) {
    char *weekStr[] = {'星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'};
    printf('%d年%d月%d日-%s\n', date.year, date.month, date.day, weekStr[date.week]);
}

int main() {
    int count;
    printf('请输入一个1~366之间的值:');
    scanf('%d', &count);
    
    if (count >= 1 && count <= 366) {
        Date date;
        convertToDate(count, &date);
        printDate(date);
    } else {
        printf('输入值不在范围内\n');
    }
    
    return 0;
}

运行示例:

请输入一个1~366之间的值:10 2020年1月10日-星期五

代码说明:

  1. typedef struct Date:定义一个结构体 Date,用于存储日期信息(年、月、日、星期)。
  2. isLeapYear(int year):判断输入年份是否为闰年。
  3. convertToDate(int count, Date *date):将计数转换为年、月、日、星期,并将结果存储在 Date 结构体中。
  4. printDate(Date date):将日期信息输出到控制台。
  5. main():主函数,用于接收用户输入的计数,调用函数进行转换和输出。

代码中需要注意的点:

  • startWeek 变量存储 2020 年 1 月 1 日的星期,为星期三,因此值为 3。
  • convertToDate 函数中,使用循环遍历每个月,并计算当前计数在哪个月份,最后根据计数计算星期。
  • printDate 函数使用数组存储星期名称,根据 date.week 的值输出对应星期。

希望以上解释对您有所帮助。如果您还有其他问题,请随时提问。


原文地址: https://www.cveoy.top/t/topic/pbK2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录