计算任意两个日期之间的天数问题

原创 2007年09月21日 14:21:00

 程序代码:

#include "stdio.h"

int days[2][13]={365,31,28,31,30,31,30,31,31,30,31,30,31,
                
366,31,29,31,30,31,30,31,31,30,31,30,31}
;

int Leap(int year)        //判断是否为闰年
{
    
return ( (year%400==0|| (year%4==0 && year%100!=0));
}


int Deal(int dat0,int dat1)
{
    
int i,temp,sum0,sum;
    
int year0,month0,day0,year1,month1,day1;
    sum0 
= sum = 0;
    year0 
= dat0/10000;    month0 = dat0/100%100;    day0 = dat0%100;
    year1 
= dat1/10000;    month1 = dat1/100%100;    day1 = dat1%100;

    
/*************************************************************/
    
/* 在起始日期和终止日期在同一年                                         */
    
/*************************************************************/
    
if((year1-year0)==0)
    
{
        
if((month1-month0)==0)
            
return (day1-day0);
        
else
        
{
            temp 
= Leap(year0);
            sum 
= days[temp][month0] - day0 +1;
            
for(i=month0+1;i<=month1-1;i++)
                sum 
= sum + days[temp][i];
            sum 
=sum + day1;
            
return sum;
        }
        
    }


    
/************************************************************************/
    
/* 在起始日期和终止日期不在同一年                                       */
    
/************************************************************************/
    
//计算开始年剩余的天数
    temp = Leap(year0);
    sum0 
= sum0 + (days[temp][month0] - day0) + 1;
    
for (i=month0+1; i<=12; i++)
        sum0 
= sum0 + days[temp][i];
    
    sum 
= sum +sum0;
    sum0 
= 0;

    
//计算中间年份的总天数
    for (i=year0+1;i<=year1-1;i++)
    
{
        temp 
= Leap(i);
        sum 
= sum + days[temp][0];
    }


    
//计算结束年过去的天数
    temp = Leap(year1);
    
for(i=1;i<=month1-1;i++)
        sum0 
= sum0 + days[temp][i];
    sum0 
= sum0 + day1;

    sum 
= sum + sum0;

    
return sum;
}


void main()
{
    
int dat0,dat1,sum;
    FILE 
*fp = NULL;
    
if(fp = fopen("riqi.dat","r"))
    
{
        
while (fscanf(fp,"%d%d",&dat0,&dat1)==2)
        
{
            
if(dat0==0 && dat1==0)    break;
            sum 
= Deal(dat0,dat1);
            printf(
"天数为:%d ",sum);
        }

    }

    fclose(fp);
}

程序数据文件格式:

(日期格式为:年月日;年为任意位数,月、日的位数为两位,不足补零;两个日期中间以空格隔开;以下数据复制到记事本,重命名为“riqi.dat”,与代码文件放在同一文件夹)

  例:

19861231 19870101
19860101 19861231
19850101 19861231
19840101 19861231
19830101 19861231
19820101 19861231
19810101 19861231
2020811 19860606
0 0

 

运算结果:

天数为:2
天数为:365
天数为:730
天数为:1096
天数为:1461
天数为:1826
天数为:2191
天数为:651528
请按任意键继续. . .

 

[R语言]求出两个日期之间的工作日天数

由于现在百度上还不能够搜到相关的算法及包,所以开发了一个函数如下,欢迎直接拿去用,当然如果有更好的算法也欢迎和我交流。 workdays...
  • qq_36852770
  • qq_36852770
  • 2018年01月03日 19:21
  • 106

ruby计算时间差

1、计算两个时间相差的天数 DateTime.parse("2007-12-28") - DateTime.parse("2007-12-26")=>2 2、计算两个时间相差的秒数 (DateTime...
  • yc1022
  • yc1022
  • 2016年05月12日 16:27
  • 1812

ACM之计算时间

题目描述: 输入年月日时分秒,输出从该时间开始5秒后的时间,24小时制。 输入样例: 2008 8 8 11 45 56 输出样例: 2008 8 8 11 46 1 ...
  • shuipingzildy
  • shuipingzildy
  • 2013年03月18日 19:24
  • 756

日期计算-ACM

日期计算 描述如题,输入一个日期,格式如:2010 10 24 ,判断这一天是这一年中的第几天。 输入第一行输入一个数N(0 输出每组输入数据的输出占一行,输...
  • foreverhuylee
  • foreverhuylee
  • 2014年07月04日 14:31
  • 1093

[ACM]时间计算器

Input 多组输入数据。 每组数据为两个字符串,每个字符串占一行。 字符串格式为"hh:mm",其中00 第一行字符串表示Jam(某著名土豪战学长)起床时间,第二行字符串表示他从另一个室友...
  • yuchenchenyi
  • yuchenchenyi
  • 2015年12月01日 12:42
  • 513

CCF NOI1016 计算天数

问题链接:CCF NOI1016 计算天数。 时间限制: 1000 ms  空间限制: 262144 KB 题目描述   输入年份与月份,求该月共有多少天。 输入   输入两个空格隔开的正...
  • tigerisland45
  • tigerisland45
  • 2017年04月20日 16:43
  • 626

计算任意两个日期之间的天数问题

 程序代码:#include "stdio.h"int days[2][13]=...{365,31,28,31,30,31,30,31,31,30,31,30,31,                ...
  • yangchun57
  • yangchun57
  • 2007年09月21日 14:21
  • 399

华为OJ——计算日期到天数转换

计算日期到天数转换 题目描述 根据输入的日期,计算是这一年的第几天。。 详细描述: 输入某年某月某日,判断这一天是这一年的第几天?。 接口设计及说明:  /**********************...
  • u010480899
  • u010480899
  • 2016年07月16日 20:21
  • 757

给定两个日期,计算中间的天数

C语言版的 /* 给定两个日期,计算中间的天数 思路: 1、同年同月的时候,直接计算天数的差值 2、同年不同月,计算月份和天数的差值(小月到月底+大月月初到指定日期的天数+中间隔的月...
  • zheng0518
  • zheng0518
  • 2013年05月16日 23:41
  • 1059

Java计算任意两个日期间隔的工作天数

主要思路:对于任意2个日期比如:date_start=2006-10-1、date_end=2006-10-14 ,首先计算这连个日期之间的时间间隔(天数),然后分别对date_start 和date...
  • daryl715
  • daryl715
  • 2007年07月26日 14:18
  • 5640
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算任意两个日期之间的天数问题
举报原因:
原因补充:

(最多只允许输入30个字)