42

问答题 42 /50

编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒。

参考答案

/*输入年月日时分秒,输出年月日时分秒的下一秒,输出仍然在原内存空间*/
void NextMinute(int *nYear, int *nMonth, int *nDate, int *nHour, int *nMinute, int *nSecond)
{
    int nDays;
    (*nSecond)++; // 秒加1
    if (*nSecond >= 60) // 秒满60,做出特殊处理,下面时,日,月等类同
    {
        *nSecond = 0;
        (*nMinute)++;
        if (*nMinute >= 60)
        {
            *nMinute = 0;
            (*nHour)++;
            if (*nHour >= 24)
            {
                *nHour = 0;
                (*nDate)++;
                switch (*nMonth)
                {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    nDays = 31;
                    break;
                case 2:// 判断闰年
                    if (*nYear % 400 == 0 || *nYear % 100 != 0 && *nYear % 4 == 0)
                    {
                        nDays = 29;
                    }
                    else
                    {
                        nDays = 28;
                    }
                    break;
                default:
                    nDays = 30;
                    break;
                }
                if (*nDate > nDays)
                {
                    *nDate = 1;
                    (*nMonth)++;
                    if (*nMonth > 12)
                    {
                        *nMonth = 1;
                        (*nYear)++;
                    }
                }
            }
        }
    }
}
/*示例可运行代码*/
void main()
{
    int nYear = 2004, nMonth = 12, nDate = 31, nHour = 59, nMinute = 59, nSecond = 59;
    NextMinute(&nYear, &nMonth, &nDate, &nHour, &nMinute, &nSecond);
    printf("The result:%d-%d-%d %d:%d:%d", nYear, nMonth, nDate, nHour, nMinute, nSecond);
}