⑴ 急求!c語言計算天數

【程序】:
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天數*/
if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是閏年且月份大於2,總天數應該加一天*/
sum++;
printf("It is the %dth day.",sum);}

⑵ 關於C語言的問題。設計一個程序,根據用戶的選擇,將1、日期轉換為天數2、將天數轉換為日期。

代碼存在一些問題:

#include<stdio.h
#defineMAXNUM114
#defineMAXNUM214
intmain()
{
inta,b,c,Y,M,D,Days;
intDays_[MAXNUM1]={0,31,28,31,30,31,30,31,31,30,31,30,31};
intDate[MAXNUM2]={0,1,2,3,4,5,6,7,8,9,10,11,12};

printf("Plesechoosewhatyouwanttodo. 1.DatechangeDays 2.DayschangeDate ");
scanf("%d",&a);
if(a==1)
{Days=0;
printf("Pleseenteradate(YMD). ");
scanf("%d%d%d",&Y,&M,&D);
if(Y%4==0&&Y%100!=0||Y%400==0)//這里改下
{
for(b=1;b<M;b++)
if(b==2)//閏年二月加一天
{
Days+=Days_[b]+1; }
else
{
Days+=Days_[b];
}

}else
{
for(b=1;b<M;b++)
{
Days+=Days_[b];
}
}
Days+=D;
printf("Thedatewhichyouenteristhe%ddays. ",Days);
}else//a==2
{
printf("Pleseenteradays.");
scanf("%d",&Days);
for(b=1;b<13;b++)//未考慮年份的問題
{
if(Days<=Days_[b])break;
Days-=Days_[b];
}
printf("Thedaywhichyouenteristhe%d\%ddays. ",b,Days);
}
}

上面是簡單的實現,希望有幫助

⑶ c語言由天數算日期

如果知道一個指定日期以及要求指定天數,以後是什麼日期,可以通過計算到當月月末有幾天,然後再減去接下來的一個月的天數。逐個月模擬的進行推算。

⑷ c語言兩日期相差天數

#include <stdio.h>
#include<math.h>
int main()
{
int s=0,m1,d1,y1,y2,m2,d2,i,a[12]={31,28,31,30,31,30,31,31,30,31,30,31},b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
scanf("%d %d %d",&y1,&m1,&d1);
scanf("%d %d %d",&y2,&m2,&d2);
if(y1==y2)
{
if((y1%100!=0&&y1%4==0)||y1%400==0)
{
while(m1<m2)
{s=b[m1-1]+s;
m1=m1+1;
}
}
else
{
while(m1<m2)
{s=a[m1-1]+s;
m1=m1+1;
}
}
printf("%d days\n",s+d2-d1);
}
else
{
while(y1<y2)
{
if(m1<=2)
{
if((y1%100!=0&&y1%4==0)||y1%400==0)
{s=366+s;}
else
{s=365+s;}
y1=y1+1;
}
else
{
y1=y1+1;
if((y1%100!=0&&y1%4==0)||y1%400==0)
{s=366+s;}
else
{s=365+s;}
}
}
if(m1<=m2)
{
if((y2%100!=0&&y2%4==0)||y2%400==0)
{for(i=0;m1<m2;i++)
{s=b[m1-1]+s;
m1=m1+1;
}
}
else
{for(i=0;m1<m2;i++)
{s=a[m1-1]+s;
m1=m1+1;
}
}
printf("%d days\n",s+d2-d1);
}
else
{
if((y2%100!=0&&y2%4==0)||y2%400==0)
{
while(m1>m2)
{s=b[m1-1]+s;
m1=m1-1;
}
}
else
{
while(m1>m2)
{s=a[m1-1]+s;
m1=m1-1;
}
}
printf("%d days\n",s+d2-d1);
}
}
return 0;
}
你試試看!

⑸ 如何用C語言計算日期間離天數

我學C#、Java的,對C不是很了解,僅僅提供個思路:
請問一下C有沒有日期函數?內有吧容應該?
如果有的話,是不是能返回自1970年1月1日起到你輸入的日期的毫秒數呢?
能返回的話,你輸入的兩個時間都換成毫秒數,一減,得到的不就是兩個
日期相差的毫秒數?
然後把毫秒數換算成天數不就成了?

⑹ 給定年月日 怎樣用C語言編程計算2個日期之間的時間天數

問題不難。
思路如下:
1. 要判斷時間的合法性(如果不想判斷也可以)
參考資料:(使用的是C++,修改之後TC下也可運行,主要是看思路)
http://hi..com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html

2. 判斷兩個日期之間的天數
判斷輸入的年份是不是閏年;年份是否相同;月份是否相同;日是否相同?
同年同月最好計算,日數相減就出來了;同年不同月也好計算,計算中間相隔幾個月,轉換成天數,小的日期距月底有多少天,大的日期距月初多少天,三個數相加;關鍵是不同年的日期計算:先計算中間相隔幾年,這幾年的天數就出來了,再計算小的日期到年底有多少天,其次計算大的日期距年初有多少天,三個數相加就可以了。
參考資料:(也是用C++編寫的,你可以把類修改為結構體,一樣可以使用)
http://..com/question/55367386

以下為計算兩個日期之間天數的代碼:
/* 返回絕對值 */
int abs(int a,int b)
{
if(a>=b)
return (a-b);
else
return (b-a);
}

/* 判斷是否為閏年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return 1;
else
return 0;
}

/* 判斷某個日期從年初(y年1月1日)到該天(y年m月d日)的天數 */
int Days(int y,int m,int d)
{
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int sum = 0 ; /* 計算天數 */
if(IsLeap(y)) /* 如果為閏年,2月有 29 天 */
days[2] = 29 ;
for(i=0;i<m;i++)
sum = sum +days[i] ;
sum = sum + d - 1 ;
return sum;
}

/*
判斷兩個日期之間的天數.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
int s1,s2; /* 計算兩個日期從年初到該日期的天數 */
int count; /* 計算兩個年份之間的差值 */
int sum=0; /* */
int t,t1,t2;
if(y1==y2)
{
s1 = Days(y1,m1,d1);
s2 = Days(y2,m2,d2);
return abs(s1,s2);
}
else if(y1>y2)
{
count = y1 - y2 ;
if(count == 1)
{
t1 = Days(y1,m1,d1);
t2 = Days(y2,12,31) - Days(y2,m2,d2);
return (t1+t2+count);
}
else
{
for(t = y2+1;t<y1;t++)
sum = sum + Days(t,12,31);
cout<<sum<<endl;
t2 = Days(y2,12,31) - Days(y2,m2,d2);
t1 = Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}
else
{
count = y2 - y1 ;
if(count == 1)
{
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (t1+t2+count);
}
else
{
for(t = y1+1;t<y2;t++)
sum = sum + Days(t,12,31);
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}

}

/*
以上代碼在Viusal C++ 6.0 編譯下通過,TC下也可以通過。
使用DiffDays(int,int,int,int,int,int)這個函數就可計算出兩個日期之間的天數.
至於日期的合法性,沒有進行判斷;也就是說,你如果輸入一個不合法的日期,計算出來的結果是不正確的;如果是合法日期,那就沒問題。
*/

⑺ 如何用c語言來計算日期間隔天數

樓上的說的太麻煩了(真是傻瓜做法)//定義兩個時間DateTime time1=Convert.ToDateTime("2006-05-23");DateTime time2=Convert.ToDateTime("2045-12-15");//計算間隔天專數(精確到毫秒格屬式為「2222.22.22.2222」)TimeSpan span = (TimeSpan)(time2-time1);int result = Convert.ToInt32(Convert.ToString(span).SubString(0,Convert.ToString(span).IndexOf(".")));//result就是你要的天數

⑻ 用c語言編寫計算兩個日期之間的天數

#include <time.h>
#include <stdio.h>
void main()
{
tm t1={0},t2={0};
t1.tm_year = 1999-1900;
t1.tm_mon = 2-1;
t1.tm_mday = 3;
t2.tm_year = 2015-1900;
t2.tm_mon = 5-1;
t2.tm_mday = 4;
time_t a1 = mktime(&t1);
time_t a2 = mktime(&t2);
printf("相差%d天", (a2-a1)/86400);
}
ps:看不懂了再追問

⑼ 計算兩日期之間天數的C語言程序

#include <stdio.h>
#include <time.h>
#include <memory.h>

int main(void)
{
time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示回為答 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示為 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
}

⑽ c語言 用庫函數計算兩日期相差的天數

給你寫了一個程序,應該能看懂的:

#include <stdio.h>
#include <time.h>
#include <memory.h>

int main(void)
{
time_t t1;
time_t t2;

struct tm OldTime;
struct tm NewTime;

memset(&OldTime,0x0,sizeof(tm));
OldTime.tm_year = 110;// 2010 年表示為 2010 - 1900 = 110
OldTime.tm_mon = 12;
OldTime.tm_mday = 6;

memset(&NewTime,0x0,sizeof(tm));
NewTime.tm_year = 111;// 2011 年表示為 2011 - 1900 = 111
NewTime.tm_mon = 12;
NewTime.tm_mday = 6;

t1 = mktime(&NewTime); //2011-12-6
t2 = mktime(&OldTime); //2010-12-6

printf("%d",(t1-t2)/(24*3600));

return 0;
}