C++计算两个日期之间的天数

计算两个日期之间的天数的思路:

首先,判断输入的年份是不是闰年。年份是否相同?月份是否相同?日是否相同?

日月年有三种可能的情况:

  1. 同年同月。日数相减就出来了。
  2. 同年不同月。计算日期小的月份到年初的天数,计算日期大的月份到年初的天数。再把两个日期向减
  3. 不同年。先计算中间相隔几年,计算较小的日期到年底有多少天,再计算较大的日期距年初有多少天,将三个数向加。

代码如下:

 1 #include<iostream>
 2 #include<CString>
 3 #include<cmath>
 4 using namespace std;
 5
 6 bool isleapyear(int year)   //判断是否是闰年
 7 {
 8     if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
 9         return 1;
10     else
11         return 0;
12 }
13
14 int Days(int y, int m, int d)     //计算y年m月d日到y年1月1日的天数
15 {
16     int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
17     int i;
18     int sum = 0;         /* 计算天数 */
19     if (isleapyear(y))     /* 如果为闰年,2月有 29 天 */
20         days[2] = 29;
21     for (i = 0; i<m; i++)
22         sum = sum + days[i];
23     sum = sum + d - 1;
24     return sum;
25 }
26
27 int Days(int y1, int m1, int d1, int y2, int m2, int d2) //计算年月日都不相同的两个日期之间的天数
28 {
29     int t1;
30     int t2;
31     int year = y2-y1;
32     int sum=0;  //相差的天数
33     if (year == 1)      //如果两个日期的年份相差为1
34     {
35         t1 = Days(y1, 12, 31) - Days(y1, m1, d1);  //较小的日期计算y1年m1月d1日到年底的天数
36         t2 = Days(y2, m2, d2);                       //较大的日期计算y2年m2月d2日到年初的天数
37         sum = t1 + t2 + year;
38     }
39     else{
40         for (int i = y1+1; i < y2; i++)
41         {
42             if (isleapyear(i))
43             {
44                 sum += 366;
45             }
46             else
47                 sum += 365;
48         }
49         t1 = Days(y1, 12, 31) - Days(y1, m1, d1);
50         t2 = Days(y2, m2, d2);
51         sum = sum + t1 + t2 + 1;
52
53     }
54     return sum;
55 }
56
57 int main(){
58     int year1;   //较小的年份
59     int year2;
60     int month1;  //较小的月份
61     int month2;
62     int day1;
63     int day2;
64     int day=0;
65     cin >> year1 >> month1 >> day1;
66     cin >> year2 >> month2 >> day2;
67
68     if (year1 > year2 || (year1 == year2) && (month1 > month2) || ((year1 == year2) && (month1 == month2)) && (day1 > day2) )
69     {
70         cout << "输入错误" << endl;
71     }
72     else{
73
74         if (year1 == year2&&month1 == month2)    //  1.如果年和月相同,直接计算天数的差
75         {
76             day = abs(day2 - day1);
77             cout << day << endl;
78         }
79         else if (year1 == year2 && month1 != month2)   //  2.如果年份相同而月份不同,则计算较小的日期到较大的日期的天数
80         {
81             day = abs(Days(year1, month1, year1) - Days(year2, month2, day2));
82             cout << day << endl;
83         }
84         else
85         {
86             day = Days(year1, month1, day1, year2, month2, day2);
87             cout << day << endl;
88         }
89     }
90     return 0;
91     }

对于部分代码的理解:

int Days(int y, int m, int d)     //计算y年m月d日到y年1月1日的天数
{
    int days[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int i;
    int sum = 0;         /* 计算天数 */
    if (isleapyear(y))     /* 如果为闰年,2月有 29 天 */
        days[2] = 29;
    for (i = 0; i<m; i++)
        sum = sum + days[i];
    sum = sum + d - 1;
    return sum;
}

这段代码的理解可以用下图表示:

我们需要求的日期为两个红箭头之间的绿色部分。

 1 for (int i = y1+1; i < y2; i++)
 2         {
 3             if (isleapyear(i))
 4             {
 5                 sum += 366;
 6             }
 7             else
 8                 sum += 365;
 9         }
10         t1 = Days(y1, 12, 31) - Days(y1, m1, d1);
11         t2 = Days(y2, m2, d2);
12         sum = sum + t1 + t2 + 1;

这段代码的理解可以用下图表示:

2015年跟2011年相差的其实只有三年,刚开始写的时候年数直接写的是2015减2011,导致多算了一年。

时间: 2024-10-01 04:49:59

C++计算两个日期之间的天数的相关文章

25:计算两个日期之间的天数

25:计算两个日期之间的天数 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给定两个日期,计算相差的天数.比如2010-1-1和2010-1-3相差2天. 输入 共两行:第一行包含三个整数startYear,startMonth,startDay,分别是起始年.月.日.第二行包含三个整数endYear,endMonth,endDay,分别是结束年.月.日.相邻两个整数之间用单个空格隔开. 年份范围在1~3000.保证日期正确且结束日期不早于起始日期.

计算两个日期之间的天数

//计算两个日期之间的天数 - (NSInteger)calcDaysFromBegin:(NSDate *)beginDate end:(NSDate *)endDate { NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm"]; //取两个日期对象的时间间隔: NSTimeInterval time= [endD

JS计算两个日期之间的天数

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Typ

java计算两个日期之间相差天数和相隔天数详解

大家看到文章标题"两个日期之间相差天数和相隔天数",是否有疑惑呢!从中文字面理解,"相差"和"相隔"是有区别的,然而就是这些区别害死很多人,却没有发现,在大量新增统计时是差之毫厘谬以千里,我能都发现是因为一个偶然的机会,一个项目运行几年却没有人发现,我在其中还不到一年,一开始写这些这代码的人根本没分清楚什么情况就写了,怪不得统计的数据总是有那么细微的差别,在于日期"相差"和"相隔"有某些特定的情况下是相等的

计算两个日期之间的天数差C++/java

1--Java 分析:调用java中Calendar类 int days(Date date1,Date date2){ Calendar cal = new Calendar.getInstance(); cal.setTime(date1); int time1 = cal.get(Calendar.DAY_OF_YEAR); cal.setTime(date2); int time2 = cal.get(Calendar.DAY_OF_YEAR); //long days = Math.a

As3 计算两个日期之间的天数差

? 1 /*日期转YYYYMMDD*/ ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79

8.02 计算两个日期之间的天数

select datediff(ward_hd,allen_hd)from (select hiredate as ward_hdfrom empwhere ename='WARD') x,(select hiredate as allen_hdfrom empwhere ename='ALLEN')y;

8.2 计算两个日期之间的天数

select datediff(ward_hd,allen_hd)from (select hiredate as ward_hdfrom empwhere ename='WARD') x,(select hiredate as allen_hdfrom empwhere ename='ALLEN')y;

java计算两个日期之间相隔的天数

1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 6 7 public class date { 8 9 /** 10 * @param args 11 * @throws ParseException 12 */ 13 public static void main(String[] arg