首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言日期計算:輸入年月日輸出隔天日期完整實現

     編輯:C 語言問答

日期運算核心邏輯

計算下一天日期需處理:月份天數差異、閏年判斷、年末跨年邊界條件。

閏年判斷規則

// 閏年條件:能被4整除但不能被100整除,或能被400整除
int isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

每月天數查找表

int daysInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
// 閏年二月調整為29天
if (isLeapYear(year)) daysInMonth[1] = 29;

完整程式實現

#include <stdio.h>
#include <stdbool.h>

bool isValidDate(int y, int m, int d) {
    if (m < 1 || m > 12 || d < 1) return false;
    int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if (isLeapYear(y)) days[1] = 29;
    return d <= days[m-1];
}

void nextDay(int y, int m, int d, int *ny, int *nm, int *nd) {
    int days[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
    if (isLeapYear(y)) days[1] = 29;
    
    d++;
    if (d > days[m-1]) {
        d = 1;
        m++;
        if (m > 12) {
            m = 1;
            y++;
        }
    }
    *ny = y; *nm = m; *nd = d;
}

int main() {
    int y, m, d, ny, nm, nd;
    printf("輸入日期 (年 月 日): ");
    scanf("%d %d %d", &y, &m, &d);
    
    if (!isValidDate(y, m, d)) {
        printf("日期非法!\n");
        return 1;
    }
    
    nextDay(y, m, d, &ny, &nm, &nd);
    printf("隔天日期: %04d-%02d-%02d\n", ny, nm, nd);
    return 0;
}

關鍵測試用例

輸入輸出說明
2023 12 312024-01-01跨年
2024 02 282024-02-29閏年二月
2023 02 282023-03-01平年二月
2024 01 312024-02-01大月結束
2024 04 302024-05-01小月結束

進階擴展

可封裝為 Date 結構體,實現日期加減運算、星期計算(蔡勒公式)、日期差值等功能,構建完整日期時間庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved