输入
第一行输出一个数字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。# 问题遇到的现象和发生背景
从秒逐渐往上累加
代码:
#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