早教吧 育儿知识 作业答案 考试题库 百科 知识分享

c++菜鸟求助日期与时间显示,实现以下功能日期时间显示(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒)。(2)定义一个日期类Date,记录年、月

题目详情
c++菜鸟求助 日期与时间显示,实现以下功能
日期时间显示
(1)定义一个时间类Time,能提供时、分、秒组成的时间,并提供时间增加的方法(按秒)。
(2)定义一个日期类Date,记录年、月、日,并提供日期增加的方法(按天)。
(3)由类Time和日期类Date,派生出DateTime类,除具有年、月、日、时、分、秒外,还增加国名和与格林威治时间的差。
编一应用程序,输入年、月、日、时、分、秒,在屏幕上模拟显示一电子计时器,不断输出下一秒的时间和日期,以及格林威治的日期和时间。
注意,当对日期增加1天后,会涉及所谓的“进位”问题:首先算出本“日”所在的月份具有的天数N,若加1之后的“日”数值超过所在的月份具有的天数N时,“进位”到月,而月份若超过12时还要“进位”到年。
思考:可对该类增加你所考虑到的其他功能,如,对日期进行输入,计算二日期的间隔天数,计算某日期为星期几,打印对象当前数据的y年m月的月历,一次增加若干天,对两个日期进行其他比较运算等。
▼优质解答
答案和解析

(1)定义个时间类CMyTime,公有成员变量时、分、秒,重载操作符operator++(int),秒自动加1,满60,分进1,分满60,时进1,时满24,则清零。

(2)CMyDate与时间类相似,但要注意判断每个月天数,进位。

(3)用CMyDateTime:CMyTime,CMyDate来派生,新类中再加公有成员变量。

用定时器,每1000ms对时间自加并显示。时区信息可以在系统中找到相应信息。

对于如何计算1个月有多少天可以指定数组,如果你的程序支持年份在1582以后,则按能被4整除以及能被400整除但不能被100整除的年份为闰年,如果之前,则去掉不能被100整除这一条件即可。计算两个日期之间的天数差,按照普通人的思维方式,那就是两个日期之间相差的整数年乘365再加上闰年数量,再加余下部分天数,比如2011年11月11日到2014年5月20日,则2年,加一个闰年,再加2011年11月11日到2012年12月31日的天数,再加上2014年1月1日到2014年5月20日的天数。但这样太复杂,而且对1582年10月及以前的日期就会出现错误,可以考虑用一参考日期,再由这一日期来算两个日期之间的差。

void CTimeConv::GetJD(SYSTEMTIME st_UT,double &nJulianDay,unsigned int &DayofWeek)
{
    double year,month,day,hour,minute,seconds,remainDay;//年、月、日,小数部分日(不足1天部分)
    year=st_UT.wYear;
    month=st_UT.wMonth;
    day=st_UT.wDay;
    hour=st_UT.wHour;
    minute=st_UT.wMinute;
    seconds=st_UT.wSecond;
    if (hour<0)
    {
        hour=0;//未赋值时对其初始化
    }
    if (minute<0)
    {
        minute=0;
    }
    if (seconds<0)
    {
        seconds=0;
    }
    remainDay=(hour+(minute+(seconds/60))/60)/24;//必须用double,不然会有截断,影响精度
    if (month<=2&&month>0)
    {
        year--;
        month+=12;
    }
    int A=int(year/100);
    int B=0;
    if (year==1582)
    {
        if (month==10)
        {
            if (day>=15)
            {
                B=2-A+INT(A/4);
            }
        }else if (month>10)
        {
            B=2-A+INT(A/4);
        }
    }else if (year>1582)
    {
        B=2-A+INT(A/4);
    }
    nJulianDay=int(365.25*(year+4716))+int(30.6001*(month+1))+(day+remainDay)+B-1524.5;
    DayofWeek=((unsigned int)(nJulianDay+1.5))%7;
}

可以换成你自己的类,这个函数除了可以算出基准天数(两天之差就只要计算两个日期,然后得到的天数相减),还可以算出星期。

详细可以参考我写的程序 http://blog.163.com/paradise300@126/blog/static/69940666201322622926503/

看了 c++菜鸟求助日期与时间显示...的网友还看了以下:

下列关于按劳分配说法正确的是()A.生产资料公有制是实行按劳分配的前提B.社会主义条件下人们收入差  2020-05-13 …

实行按劳分配,是由我国现实的经济条件决定的。关于按劳分配,下列说法错误的是A.社会主义公有制条件下  2020-05-13 …

现阶段,我国实行按劳分配是由我国现实的经济条件决定的。这些现实的经济条件是()①生产资料公有制是实  2020-05-13 …

在我国实行按劳分配是由我国多种经济条件决定的。其中实行按劳分配的物质基础是A.生产资料社会主义公有  2020-05-13 …

实数按正负可分为?填充题实数按正负分可分为A和零和BA可分为ab其中a可分为正整数和正分数B可分为  2020-06-11 …

社会主义按劳分配的必然性是()多选题A社会主义生产资料公有制且实行按劳分配的前提条件B社会主义生产  2020-07-08 …

下列各项对按劳分配理解正确的是()[]A.按劳分配是社会主义制度下个人消费品的分配原则B.实行按劳  2020-07-08 …

在我国社会主义初级阶段,国家实行按劳分配为主体、多种分配方式并存的个人收入分配制度,把按劳分配和按生  2020-11-28 …

有人认为:现实主义按照“本来如此”的面目再现生活,浪漫主义按照“应当这样子”表现生活。由此可见现实主  2021-01-12 …

下列对按劳分配理解正确的是①按劳分配是社会主义市场经济中个人消费品分配的基本原则②实行按劳分配的直接  2021-02-01 …