给定年月日 怎样用C语言编程计算2个日期之间的时间天数

Python034

给定年月日 怎样用C语言编程计算2个日期之间的时间天数,第1张

1970 年以后的时间,可以用 time.h 里的函数计算。时间精度为秒。按题目要求,输出时间单位用天。程序如下:

#include <stdio.h>

#include <time.h>

time_t YMD_hhmmss_2_s70(int Y, int M, int D, int hh, int mm, int ss){

struct tm *target_tm

time_t tt

time (&tt)

target_tm=localtime(&tt)

target_tm->tm_year = Y - 1900

target_tm->tm_mon= M - 1

target_tm->tm_mday = D

target_tm->tm_hour = hh // hour

target_tm->tm_min = mm

target_tm->tm_sec = ss

tt = mktime(target_tm) // from tm to time_t (s)

return tt

}

int main()

{

int y1,m1,d1,y2,m2,d2

time_t t1,t2

int dt

printf("input y1 m1 d1: ")

scanf("%d %d %d",&y1,&m1,&d1)

printf("\ninput y2 m2 d2: ")

scanf("%d %d %d",&y2,&m2,&d2)

t1 = YMD_hhmmss_2_s70(y1,m1,d1,0,0,0)

t2 = YMD_hhmmss_2_s70(y2,m2,d2,0,0,0)

dt = (t2-t1)/(24*3600)

printf("\ndt=%d\n",dt)

return 0

}

这里未包含日期的合法性判断。

1970 年以前 要另写程序。某年的日子是当年的第几天可用下面函数得出:

int YMD_2_JD(int Y, int M, int D){

const short MonthDay[]={0,31,28,31,30,31,30,31,31,30,31,30,31}

int JD,i

JD=D

for (i=0i<Mi++) JD+=MonthDay[i]

if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) &&(M>2)) JD++

return JD

}

整年的天数,涉及闰年的判断:

某年是否闰年,用 (Y%4==0)&&(Y%100!=0)||(Y%400==0) 判断。闰年366天,平年365天。 有了这些,写程序不难。

未考虑公元前的年月日计算。

代码存在一些问题:

#include<stdio.h

#define MAXNUM1 14

#define MAXNUM2 14

int main()

{

int a,b,c,Y,M,D,Days

int Days_[MAXNUM1]={0,31,28,31,30,31,30,31,31,30,31,30,31}

int Date[MAXNUM2]={0,1,2,3,4,5,6,7,8,9,10,11,12}

printf("Plese choose what you want to do.\n1.Date change Days\n2.Days change Date\n")

scanf("%d",&a)

if(a==1)

{              Days = 0

printf("Plese enter a date(Y\M\D).\n")

scanf("%d %d %d",&Y,&M,&D)

if(Y%4==0&&Y%100!=0||Y%400==0)//这里改下

{

    for(b=1b < Mb++)

     if(b==2)//闰年二月加一天

     {

Days+=Days_[b]+1      }

     else 

     {

        Days+=Days_[b]

     }

  

                }else

                {

                   for(b=1b < Mb++)

                   {

       Days+=Days_[b]

   } 

                }

                 Days += D   

 printf("The date which you enter is the %d days.\n",Days)

    }else //a==2

    {

printf("Plese enter a days.")

scanf("%d",&Days)

for(b=1b < 13b++)//未考虑年份的问题

{

    if(Days <= Days_[b]) break

    Days -= Days_[b]

}

printf("The day which you enter is the %d\%d days.\n",b,Days)

    }

}

上面是简单的实现,希望有帮助

计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。

要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。

((year % 4 == 0 &&year % 100 != 0) || year % 400 == 0)

网上找了一个(偷懒= =!),修改下如下:

#include <stdio.h>

int sum(int y,int m,int d)

{

unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}

int i,s=0

for(i=1i<yi++)

if(i%4==0 &&i%100!=0 || i%400==0)

s+=366//闰年

else

s+=365//平年

if(y%4==0 &&y%100!=0 || y%400==0)

x[2]=29

for(i=1i<mi++)

s+=x[i]//整月的天数

s+=d//日的天数

return s//返回总天数,相对公元1年

}

void main()

{

unsigned char y1,m1,d1,y2,m2,d2

int s1,s2

printf("输入第一个年 月 日:")

scanf("%d %d %d",&y1,&m1,&d1)

printf("输入第二个年 月 日:")

scanf("%d %d %d",&y2,&m2,&d2)

s1=sum(y1,m1,d1)

s2=sum(y2,m2,d2)

if (s1 >s2)

printf("相差天数:%ld\n",s1-s2)

else

printf("相差天数:%ld\n",s2-s1)

}

以上代码VC6编译测试通过。

虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减