zoukankan      html  css  js  c++  java
  • 如何计算两个(年-月-日)中间的间隔天数

    给出任意两个时间,计算其间隔天数应该如何进行?
    思路一:
    以日期较小的一个为参考对象,然后将日期一天天的加上去,直到和第二个日期完全相等,设置一个计数器(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
    ",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
    ",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 }
    简单解决代码
    我要坚持一年,一年后的成功才是我想要的。
  • 相关阅读:
    RocketMQ主从搭建
    Spring Cloud Sleuth
    Spring Cloud Eureka
    Nacos配置中心使用
    Nacos注册中心使用
    Nacos快速入门
    Nginx配置SSL
    并发工具类
    关于类的线程安全
    Docker 入门学习笔记(一)
  • 原文地址:https://www.cnblogs.com/tianxia2s/p/7145350.html
Copyright © 2011-2022 走看看