第十八周项目五-2 多少秒后的时间

本文介绍了一个程序,用于计算给定日期后多少秒的时间。包括输入验证、日期转换为秒数、显示当前日期和时间戳,以及计算指定时间后的日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题及代码

/*  
*ALL rights reserved.      
*文件名称:shibazhouxiangmu5(2)      
*作者:李长鸿      
*完成时间:2014.12.23     
*问题描述:多少秒后的时间    
*/   
#include <iostream>
using namespace std;
void W(int,int,int,int,int,int);
int days(int,int,int);
void F(int,int);
bool R(int);
int T();
struct Date
{
    int year;
    int mouth;
    int day;
    int hour;
    int minute;
    int second;
} date1 ,date2,date;
int d[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31},dy;
int main()
{
    cout<<"请依次输入年,月,日,时,分,秒:"<<endl;
    cin>>date1.year>>date1.mouth>>date1.day>>date1.hour>>date1.minute>>date1.second;
    W(date1.year,date1.mouth,date1.day,date1.hour,date1.minute,date1.second);
    date=date1;
    out();
    int U;
    U=T();
    F(dy,U);
    date2=date;
    cout<<"您想知道的日期是:"<<date.year<<"年"<<date.mouth<<"月"<<date.day<<"日"<<date.hour<<"时"<<date.minute<<"分"<<date.second<<"秒"<<endl;
    return 0;
}

void W(int y,int m,int t,int h,int f,int s)
{
    while(m>12||m<0||t>d[m]||t<0||(m==2&&t>29)||h>24||h<0||f>60||f<0||s>60||s<0)
    {
        cout<<"输入有误,请再次输入正确的日期:"<<endl;
        cin>>y>>m>>t>>h>>f>>s;
    }
}

void out()
{
    int seconds;
    dy=days(date.year,date.mouth,date.day);
    seconds=date.hour*3600+date.minute*60+date.second;
    cout<<date.year<<"年"<<date.mouth<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<dy<<"天"<<endl;
    cout<<"这是这一天的第:"<<seconds<<"秒"<<endl;
    cout<<"这是这一年的第:"<<dy*24*3600+seconds<<"秒"<<endl;
    cout<<"输入你想知道的你原先输入的时间多少秒后的日期:"<<endl;
}


bool R(int x)
{
    if((x%4==0&&x%100!=0)||(x%400==0))
        return 1;
    else return 0;
}


int days(int a,int b,int c)
{
    int days=0,i;
    for(i=1; i<b; i++)
        days=days+d[i];
    days=days+c;
    if(R(a)&&b>2)
        days=days+1;
    return days;
}


int T()
{
    int b,S,M,H;
    cin>>S;
    S=S+date.second;
    M=date.minute+S/60;
    H=(M/60+date.hour)/24+date.hour;
    date.second=S%60;
    date.minute=M%60;
    date.hour=(M/60+date.hour)%24;
    b=S/(3600*60)+H/24;
    return b;
}

void F(int dy,int b)
{
    int a;
    a=365-dy;
    if(R(date.year))
        a+=1;
    if(b<d[date.mouth]-date.day)
        date.day=date.day+b;
    else
    {
        int i;
        if(b>a)
        {
            date.mouth=1;
            date.year+=1;
            b=b-a;
            while(b>364)
            {
                if(R(date.year))
                    if(b>365)
                    {
                        date.year+=1;
                        b-=366;
                    }
                    else break;
                else if(b>364)
                {
                    date.year+=1;
                    b-=365;
                }
                else break;
            }
        }
        else
        {
            b=b-d[date.mouth]+date.day;
            date.mouth+=1;
        }
        for(i=date.mouth; b>d[i]; i++)
        {
            date.mouth++;
            b=b-d[i];
        }
        date.day=b;
    }
    


总结:。。。。。。。。。。。。程序语言绝对不是人!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值