日期计算

来源:互联网 发布:华盛顿大学网络课程 编辑:程序博客网 时间:2024/06/07 01:57

计算日期差

#include <iostream>using namespace std;struct date{    int year;    int month;    int day;};bool isLeap(int aYear);  // 判断平年闰年int daysGone(date aDate); // 计算一年的第几天int main(){    int days(0);    int days1(0);    date a,b;    cout << "请输入第一个日期(年月日):";    cin >> a.year >> a.month >> a.day;    cout << "请输入第二个日期(年月日):";    cin >> b.year >> b.month >> b.day;    for (int i = a.year; i < b.year; i++)    {        if (isLeap(i))            days1 += 366;        else            days1 += 365;    }    days = days1 + daysGone(b)-daysGone(a);    cout << "两个日期间隔" << days << "天" << endl << endl;    return 0;}bool isLeap(int aYear){    if (((aYear % 4 == 0) && (aYear % 100 != 0)) || (aYear % 400 == 0))        return true;    else        return false;}int daysGone(date aDate){    int mDays(0);    if (aDate.month > 1)        for (int i = 1; i < aDate.month; i++)            if (i == 4 || i == 6 || i == 9 || i == 11)                mDays += 30;            else if (i == 2)                if (isLeap(aDate.year))                    mDays += 29;                else                    mDays += 28;            else                mDays += 31;    return mDays + aDate.day;}

计算结果

请输入第一个日期(年月日):1985-8-9请输入第二个日期(年月日):2017-8-9两个日期间隔11688天

计算日期+天数=新日期

#include <cstdio>#include <iostream>#include <algorithm>using namespace std;struct Date{    int year;    int month;    int day;};int normalMonthDays[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};bool leapYear(int year){//leap year judgement    if(year %4 ==0 && year%100 !=0 || year %400 ==0)        return true;    return false;}Date getNewDate(Date initDate, int diffDays){    Date reDate = initDate;    //1.get years (days >=366 or 365)    int daysAyear = 365;    if(leapYear(reDate.year))    {//if leap year        daysAyear = 366;    }    while(diffDays/daysAyear)    {        diffDays = diffDays - daysAyear;        reDate.year ++;        if(leapYear(reDate.year))        {            daysAyear = 366;        }    }    //2.get months (days < 366 or 365)    if(leapYear(reDate.year))    {        normalMonthDays[2]=29;    }    while(diffDays/normalMonthDays[reDate.month])    {        diffDays = diffDays - normalMonthDays[reDate.month];        reDate.month++;        if(reDate.month >= 13)        {            reDate.year++;            if(leapYear(reDate.year))            {                normalMonthDays[2]=29;            }            reDate.month = reDate.month%12;        }    }    //3.get days    if(leapYear(reDate.year))    {        normalMonthDays[2]=29;    }    if(diffDays + reDate.day <= normalMonthDays[reDate.month])        reDate.day = diffDays + reDate.day;    else    {        reDate.day = diffDays + reDate.day - normalMonthDays[reDate.month];        reDate.month++;        if(reDate.month > 12)        {            reDate.year++;            reDate.month = reDate.month%12;        }    }    return reDate;}int main(void){    Date initDate;    int diffDays=0;    scanf("%d-%d-%d",&initDate.year, &initDate.month, &initDate.day);    scanf("%d", &diffDays);    Date reDate = getNewDate(initDate, diffDays);    printf("%d-%d-%d\n",reDate.year, reDate.month, reDate.day);        return 0;}

计算星期


int Zeller(int year,int month,int day)///蔡勒公式算星期{    if (month==1||month==2)    {        year--;        month+=12;    }    int c=year/100;    int y=year-c*100;    int week=(c/4)-2*c+(y+y/4)+(13*(month+1)/5)+day-1;    while(week<0){week+=7;}    week%=7;    return week;}



原创粉丝点击