欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++計算任意兩個日期天數(shù)差的方法詳解

 更新時間:2024年02月04日 09:39:23   作者:polokalamu  
這篇文章主要為大家詳細介紹了如何利用C++實現(xiàn)任意兩個日期天數(shù)差,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下

1.思路

這個問題有三種情況:同年同月、同年不同月、不同年。

同年同月非常容易,較難解決的是后兩個。

思路為下:

1.計算日期在前的一年到年底的天數(shù)

2.計算日期在后的一年到年初的天數(shù)

3.計算中間年份的天數(shù)

以上為解決不同年的思路。

同年不同月的思路整體差不多,也是計算前一個月到月底的天數(shù)、后一個月到月初的天數(shù)、中間月份的天數(shù)。

2.代碼實現(xiàn)

我建立了三個函數(shù):months1–計算到年底的天數(shù)差,months2–計算到年初的天數(shù)差,years1–計算兩年之間的天數(shù)差。還有一個就是閏年判斷函數(shù)lapeyear,用來判斷一年中的二月有沒有29天。

int months1(int year, int month, int date)//計算到年底日差的函數(shù)
{
    int i, d = 0;
    int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (lapeyear(year))years[1] = 29;
    for (i = 11; i > month - 1; i--)
    {
        d += years[i];
    }
    d = d + years[month - 1] - date;
    return d;
}
int months2(int year, int month, int date)//計算到年初日差的函數(shù)
{
    int i, d = 0;
    int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
    if (lapeyear(year))years[1] = 29;
    for (i = 0; i < month - 1; i++)
    {
        d += years[i];
    }
    d += date;
    return d;
}
int years1(int year1, int year2)//計算兩年間的天數(shù)
{
    int d = 0, i, r = 0, z = 0;
    if (year1 < year2)
    {
        for (i = year1 + 1; i < year2; i++)
        {
            if (lapeyear(i))r++;//兩年之間有多少個閏月
        }
        d = (year2 - year1 - 1) * 365 + r;
    }
    else
    {
        for (i = year2 + 1; i < year1; i++)
        {
            if (lapeyear(i))r++;//兩年之間有多少個閏月
        }
        d = (year1 - year2 - 1) * 365 + r;
    }
    return d;
}

3.完整代碼

以下為全部的代碼

#include<iostream>
using namespace std;
int lapeyear(int year2)//閏年判斷函數(shù)
{
	if ((year2 % 400 == 0) || (year2 % 4 == 0 && year2 % 100 != 0))
		return 1;
	else return 0;
}
int years1(int year1, int year2)//計算兩年間的天數(shù)
{
	int d = 0, i, r = 0, z = 0;
	if (year1 < year2)
	{
		for (i = year1 + 1; i < year2; i++)
		{
			if (lapeyear(i))r++;//兩年之間有多少個閏月
		}
		d = (year2 - year1 - 1) * 365 + r;
	}
	else
	{
		for (i = year2 + 1; i < year1; i++)
		{
			if (lapeyear(i))r++;//兩年之間有多少個閏月
		}
		d = (year1 - year2 - 1) * 365 + r;
	}
	return d;
}
int months2(int year, int month, int date)//計算到年初日差的函數(shù)
{
	int i, d = 0;
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (lapeyear(year))years[1] = 29;
	for (i = 0; i < month - 1; i++)
	{
		d += years[i];
	}
	d += date;
	return d;
}
int months1(int year, int month, int date)//計算到年底日差的函數(shù)
{
	int i, d = 0;
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	if (lapeyear(year))years[1] = 29;
	for (i = 11; i > month - 1; i--)
	{
		d += years[i];
	}
	d = d + years[month - 1] - date;
	return d;
}
int main()
{
	int year1, year2, month1, month2, date1, date2;
	int d = 0, i, m = 0;
	int x1, x2;//記錄兩個日期分別到年初和年底的天數(shù)
	int years[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
	cout << "請輸入兩個日期" << endl;
	cin >> year1 >> month1 >> date1 >> year2 >> month2 >> date2;
	if (year1 == year2)//大前提,同年時
	{
		if (lapeyear(year1))years[1] = 29;
		if (month1 == month2)d = date1 > date2 ? date1 - date2 : d = date2 - date1;//同年同月
		if (month1 != month2)//同年不同月
		{
			//計算方法為求出兩月之前的天數(shù),然后求前一個月剩余的天數(shù)和后一個月已經(jīng)開始的天數(shù)
			if (month1 < month2)
			{
				{
					for (i = month1; i < month2 - 1; i++)
					{
						m += years[i];
					}
				}
				d = years[month1 - 1] - date1;
				d += m + date2;
			}
			else
			{
					for (i = month2; i > month1 - 1; i++)
					{
						m += years[i];
		            }
				d = years[month2 - 1] - date2;
				d += m + date1;
			}
		}
	}
	else//求不同年的任意日期的天數(shù)差
	{
		if (year1 > year2)
		{
			x1 = months1(year2, month2, date2);//x1為到年底的日差,x2為到年初的日差
			x2 = months2(year1, month1, date1);
			d = years1(year2, year1);
			d += x1 + x2;
		}
		else
		{
			x2 = months2(year2, month2, date2);
			x1 = months1(year1, month1, date1);
			d = years1(year1, year2);
			d += x1 + x2;
		}

	}
	cout << "兩年之間的天數(shù)差為" << " " << d;
	return 0;
}

到此這篇關于C++計算任意兩個日期天數(shù)差的方法詳解的文章就介紹到這了,更多相關C++計算日期天數(shù)差內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論