有关时间计算器的问题

输入
第一行输出一个数字n,表示有n组测试数据。接下来n行,每行7个整数,前六个整数表示一个时刻(年月日时分秒),最后一个整数t,表示从这个时刻开始经过了t秒。

输出
输出n行,每行输出一个时刻(年月日时分秒),标准日期格式,详细格式参考输入输出样例。

样例输入 复制
3
2000 1 1 0 0 0 3600
2000 2 28 23 59 59 1
2000 1 1 0 0 0 123456789
样例输出 复制
Jan 1st 01:00:00 2000
Feb 29th 00:00:00 2000
Nov 29th 21:33:09 2003
提示
数据1:2000年1月1日0时0分0秒经过3600秒以后是2000年1月1日1时0分0秒

数据2:2000年2月28日23时59分59秒经过1秒以后是2000年2月29日0时0分0秒,因为2000年是闰年。

我们保证读入的初始时间是合法的,年份在公元1000年到公元2022年之间。经过秒数t<=1010。# 问题遇到的现象和发生背景

从秒逐渐往上累加

img

代码:

#include <iostream>
using namespace std;

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

int main()
{
    int i,n;
    int y,m,d,h,mi,s;
    int t;
    char mon[13][10] ={"","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    int dd[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    char days[32][10]={"","1st","2nd","3rd","4th","5th","6th",
        "7th","8th","9th","10th","11th","12th","13th",
        "14th","15th","16th","17th","18th","19th",
        "20th","21st","22nd","23rd","24th","25th",
        "26th","27th","28th","29th","30th","31st"};
    cin >> n;
    for(i=0;i<n;i++)
    {
        cin >> y >> m>>d >>h>>mi>>s >> t;
        s+=t;
        mi += s/60;
        s = s%60;
        h += mi/60;
        mi = mi%60;
        d += h/24;
        h = h%24;
        if(isleapyear(y))
            dd[2] = 29;
        else
            dd[2] = 28;
        while(d > dd[m])
        {
            if(isleapyear(y))
                dd[2] = 29;
            else
                dd[2] = 28;
            d -= dd[m];
            m++;
            if(m>12)
            {
                y +=1;
                m = 1;
            }
        }
        printf("%s %s %02d:%02d:%02d %d\n",mon[m],days[d],h,mi,s,y);
    }
    return 0;
}

用C语言写一个日期计算器
https://blog.csdn.net/weixin_30026331/article/details/117054023