两个 年月日 之间的天数计算

来源:互联网 发布:edf调度算法 编辑:程序博客网 时间:2024/05/08 21:18
/**   Date : 2015.08.13*   For  : 1.计算从固定时间点 2010.1.1 以来的天数    2.计算两个普通日期之间相隔的天数*   Tool : Microsoft Visual Studio 2013*/#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>#include <ctime>void currenttime(time_t t, int &nowyear, int &nowmonth, int &nowday, int &nowyearday){    tm *nowtime = localtime(&t);    nowyear = nowtime->tm_year + 1900;    nowmonth = nowtime->tm_mon + 1;    nowday = nowtime->tm_mday;    nowyearday = nowtime->tm_yday;}bool isleapyear(int year)           //判断是否闰年{    return year % 4 == 0 && year % 100 != 0 || year % 400 == 0; }int daysofyear(int year)            //一年的天数{    if (!isleapyear(year))        return 365;    else        return 366;}int dayinyear(int year, int month, int day)         //根据年月日,判断改天位于该年的第多少天{    int daysinyear = 0;    switch (month - 1)    {    case 11:daysinyear += 30;    case 10:daysinyear += 31;    case 9: daysinyear += 30;    case 8: daysinyear += 31;    case 7: daysinyear += 31;    case 6: daysinyear += 30;    case 5: daysinyear += 31;    case 4: daysinyear += 30;    case 3: daysinyear += 31;    case 2: daysinyear += 28;    case 1: daysinyear += 31;        break;    default:        break;    }    if (isleapyear(year) && month > 2)        daysinyear++;    daysinyear += day;    return daysinyear;}int totalfixeddays()                //固定时间点的天数计算{    int beginyear = 2010, beginmonth = 1, beginday = 1;    int nowyear, nowmonth, nowday, nowyearday;    int totaldays = 0;    currenttime(time(NULL), nowyear, nowmonth, nowday, nowyearday);    printf("        *************************************************\n");    printf("        *                                               *\n");    printf("        *                 固定时间间隔                  *\n");    printf("        *               Begin:2010. 1. 1               *\n");    printf("        *               Today:%d.%2d.%2d               *\n", nowyear, nowmonth, nowday);    printf("        *                                               *\n");    printf("        *************************************************\n");    printf("        *                                               *\n");    for (int year = beginyear; year < nowyear; year++)        totaldays += daysofyear(year);    int oldyeardays = dayinyear(beginyear, beginmonth, beginday);    totaldays = totaldays + nowyearday - oldyeardays + 1;    return totaldays;}int totalcommondays()           //两个普通时间点的天数计算{    int oldyear, oldmonth, oldday, newyear, newmonth, newday;    int totaldays = -1;    printf("        *     请输入两个时间点(年 月 日) 空格间隔     *\n");    scanf("%d%d%d%d%d%d", &oldyear, &oldmonth, &oldday, &newyear, &newmonth, &newday);    if (oldyear <= newyear)    {        totaldays += 1;        for (int year = oldyear; year < newyear; year ++)        {            totaldays += daysofyear(year);        }        totaldays = totaldays + dayinyear(newyear, newmonth, newday) - dayinyear(oldyear, oldmonth, oldday);    }    printf("        *************************************************\n");    printf("        *                                               *\n");    printf("        *                   起始时间                    *\n");    printf("        *               Begin:%d.%2d.%2d               *\n", oldyear, oldmonth, oldday);    printf("        *               Until:%d.%2d.%2d               *\n", newyear, newmonth, newday);    printf("        *                                               *\n");    printf("        *************************************************\n");    printf("        *                                               *\n");    return totaldays;}void print_fixeddays()          //输出固定时间间隔{    printf("        *              Together :%5d 天              *\n", totalfixeddays());        printf("        *                                               *\n");    printf("        *************************************************\n");}void print_commondays()         //输出普通时间间隔{    int days = totalcommondays();    if (days >= 0)        printf("        *              Together :%5d 天              *\n", days);    else        printf("        *   Error : Begin days is later than End days   *\n");      printf("        *                                               *\n");    printf("        *************************************************\n");}void print(int choose)          //输出函数{    switch (choose)    {    case 1:        print_fixeddays();        break;    case 2:        print_commondays();        break;    default:        printf("    Wrong input number !\n\n");        break;    }}int main(){    printf("        **输入指令:1(固定天数计算) 2(普通天数计算)**\n");    int choose;    scanf("%d", &choose);    print(choose);    system("pause");    return 0;}
效果图

这里写图片描述

这里写图片描述

0 0
原创粉丝点击