首页 > 代码库 > 如何计算两个(年-月-日)中间的间隔天数

如何计算两个(年-月-日)中间的间隔天数

给出任意两个时间,计算其间隔天数应该如何进行?
思路一:
以日期较小的一个为参考对象,然后将日期一天天的加上去,直到和第二个日期完全相等,设置一个计数器(day++)来统计天数。
思路二:
上边的问题是将整个问题视为一个整体进行解决,那么正是因为问题的复杂性,为了使用编程来更好的模块化解决,我们引入参考日期(1900-01-01)。将两个日期都与参考日期进行对比,计算出天数差。而后根据天数差做一个减法,得到二者之间的天数差。
思路三:
在思路二的基础上进一步进行改进。(思路二存在的问题是若询问的日期是小于参考日期的,则会出现负数,这将给问题的解决带来不必要的麻烦)我们将两个要查询的日期都和他们对应的年份的一月一号作为基准的参考日期,然后计算出三个天数差(其中有两个天数差的计算方法是一样的),最后得出结果。
思路……(欢迎留言讨论)
方案三解决步骤:
首先要能够判断出对应的年份是否是闰年(闰年是364天,否则为365天)
而后要能够求出对于任意所给日期,找出它和自己对应年份一月一日的日期差。
最后求得三个差值,计算出真正的日期差。
下面是用C语言简单的实现的一个处理:
技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 
 6 int tianxia[2][12]={
 7     {31,28,31,30,31,30,31,31,30,31,30,31},
 8     {31,29,31,30,31,30,31,31,30,31,30,31}
 9 };
10 
11 int isPrime(int year){
12     if(year%4==0&&year%100!=0 || year%400==0)
13         return 1;
14     else
15         return 0;
16 }
17 
18 int main()
19 {
20     int a,b;
21     scanf("%d%d",&a,&b);
22     if(a<b)
23         a^=b;b^=a;a^=b;
24     ///经过上边的操作后,日期a将大于日期b
25     int yeara=a/10000;
26     int moutha=(a%10000)/100;
27     int daya=(a%100);
28 
29     int yearb=b/10000;
30     int mouthb=(b%10000)/100;
31     int dayb=(b%100);
32 
33     int day1,day2,day3;
34     day1=day2=day3=0;
35 
36     for(int i=0;i<moutha-1;i++){
37             printf("%d : %d\n",i+1,tianxia[isPrime(yeara)][i]);
38         day1+=tianxia[isPrime(yeara)][i];
39     }
40     day1+=daya-1;
41 
42     for(int i=0;i<mouthb-1;i++){
43             printf("%d : %d\n",i+1,tianxia[isPrime(yearb)][i]);
44         day2+=tianxia[isPrime(yearb)][i];
45     }
46     day2+=dayb-1;
47 
48     for(int i=yearb;i<yeara;i++){
49         if(isPrime(i)==0)day3+=365;
50         else day3+=366;
51     }
52     int ans = day3+day1-day2;
53     printf("The ans is :%d  %d  %d  %d",ans,day1,day2,day3);
54     return 0;
55 }
简单解决代码

 

如何计算两个(年-月-日)中间的间隔天数