按格式给定当前时间,输出该时间的下一秒时间,注意年份考虑平年和闰年
比如:
输入:2015/12/31 23:59:59
输入为:2016/01/01 00:00:00
输入:2016/02/29 23:59:59
输出:2016/03/01 00:00:00
#include<iostream>
#include<string>
#include<string.h>
#include<vector>
#include<algorithm>
using namespace std;
void solve(string str);
int my_fun(string str);
void my_fun2(string &str,int n);
int main()
{
string str;
while(getline(cin,str))//输入格式:2016/02/29 23:59:59
{
solve(str);
}
return 0;
}
void solve(string str)
{
if(str.length()!=19)//格式不符合,直接返回
{
return;
}
int x;//2月的天数
//按输入格式,手动将年、月、天、时、分、秒字符串取出
string year=str.substr(0,4);//取年
if((my_fun(year)%4==0&&my_fun(year)%100!=0)||my_fun(year)%400==0)//计算闰年的二月
{
x=29;//平年二月28,闰年二月29
}
else
{
x=28;
}
int data[12]={31,x,31,30,31,30,31,31,30,31,30,31};//一年中每个月的天数
string mon=str.substr(5,2);//取月
string day=str.substr(8,2);//取天
string hour=str.substr(11,2);//取时
string min=str.substr(14,2);//取分
string sec=str.substr(17,2);//取秒
int si,mi,hi,di,moni;//秒、分、时、天、月的进位,初始化为0,年没有考虑进位
si=mi=hi=di=moni=yeari=0;
//s
if((my_fun(sec)+1)>59)//秒+1大于59,秒进位置1
{
sec="00";
si=1;
}
else
{
my_fun2(sec,1);//计算秒+1的值,字符串的形式
}
//min
if((my_fun(min)+si)>59)//分+si大于59,分进位置1
{
min="00";
mi=1;
}
else
{
my_fun2(min,si);
}
//hour
if((my_fun(hour)+mi)>23)
{
hour="00";
hi=1;
}
else
{
my_fun2(hour,mi);
}
//day
if((my_fun(day)+hi)>data[my_fun(mon)-1])
{
day="01";
di=1;
}
else
{
my_fun2(day,hi);
}
//mon
if((my_fun(mon)+di)>12)
{
mon="01";
moni=1;
}
else
{
my_fun2(mon,di);
}
//year
my_fun2(year,moni);
cout<<year<<"/"<<mon<<"/"<<day<<" "<<hour<<":"<<min<<":"<<sec<<endl;
}
int my_fun(string str)//将string转int
{
int data=0;
for(int i=0;i<str.length();i++)
{
data=data*10+str[i]-'0';
}
return data;
}
void my_fun2(string &str,int n)//计算string+n的值,字符串的形式
{
int data=my_fun(str)+n;
if(str.length()<=2)
{
str[0]=data/10+'0';
str[1]=data%10+'0';
return;
}
else
{
for(int i=3;i>0;i--)
{
str[i]=data%10+'0';
data=data/10;
}
return;
}
}