當前位置:首頁 » 編程語言 » c語言日期計算天數

c語言日期計算天數

發布時間: 2022-05-06 15:54:45

A. c語言怎樣計算天數

【程序1】:
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);}

B. C語言計算兩日期間的天數

//用 <time.h> 中的 time_t 和 struct tm 結構體, difftime() 函數

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

time_t maketime_t(char* date1)
{
struct tm tm0;
char str0[4];

//date1
memset( &tm0, 0, sizeof(tm0));

memset( str0, 0, 4);
strncpy(str0, date1, 4);
tm0.tm_year = atoi(str0) - 1900; //1900

memset( str0, 0, 4);
strncpy(str0, &date1[4], 2);
tm0.tm_mon = atoi(str0) - 1; //0-11

memset( str0, 0, 4);
strncpy(str0, &date1[6], 2);
tm0.tm_mday = atoi(str0); //1-31

return mktime(&tm0);
}

int day_of_day( char *date1, char *date2)
{
struct tm tm0;
char str0[4];
double diff_seconds;

time_t time_t1, time_t2;

time_t1 = maketime_t(date1);
time_t2 = maketime_t(date2);

diff_seconds = difftime(time_t1, time_t2);

return diff_seconds>0?(diff_seconds/3600/24):((-1)*diff_seconds/3600/24);
}

int main()
{
int diff_days;
diff_days = day_of_day("20121214", "20121211");
printf("diff_days=%d\n", diff_days);
return 0;
}

C. 用c語言編程計算兩個日期之間的天數

直接算兩個日期距離公元元年1月1日的天數:

若干個完整的年,若干個完整的月,若干天,加起來之後兩個天數相減就行了.

日期的合法性,閏年之類的就不羅嗦了.

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

#include <stdio.h>
struct date
{
int year;
int month;
int day;
};
int main(void)
{
int isPrime(int year);
int dateDiff(struct date mindate,struct date maxdate);
struct date mindate,maxdate;
int days;

printf("please input the one date:");
scanf("%i-%i-%i",&mindate.year,&mindate.month,&mindate.day);
printf("please input other day:");
scanf("%i-%i-%i",&maxdate.year,&maxdate.month,&maxdate.day);

days=dateDiff(mindate,maxdate);
printf("the day is:%d\n",days);
return 0;
}

/************************************************************************/
/* 判斷閏年函數(4年一潤,100年不潤,400年再潤) */
/************************************************************************/
int isPrime(int year)
{
if ((year%4==0&&year%100!=0)||(year%400==0))
{
return 1;
}
else
{
return 0;
}

}

int dateDiff(struct date mindate,struct date maxdate)
{
int days=0, flag=1;
const int primeMonth[12]={31,29,31,30,31,30,31,31,30,31,30,31};
const int notPrimeMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};

/************************************************************************/
/* 交換兩個日期函數,將小的日期給mindate,將大的日期給maxdate */
/************************************************************************/
struct date tmp;
if ((mindate.year>maxdate.year)|| (mindate.year==maxdate.year&&mindate.month>maxdate.month)||(mindate.year==maxdate.year&&mindate.month==maxdate.month&&mindate.day>maxdate.day))
{
tmp=mindate;
mindate=maxdate;
maxdate=tmp;
}

int maxmonth,minmonth;
/************************************************************************/
/* 主要思路:拿2002-8-8 2005-2-22來說 */
/* 將2004-8-8---2005-2-22----2005-7-8 */
/*一前一後剛好N年,算出2005-2-22到2005-7-8的天數,然後用總年*36(5|6)減掉) */
/* 2002-9-8 2005-11-22 */
/* 2002-9-8-----2005-9-8-----2005-11-22(這次是加上後面天數) */
/*如何判斷是加還是減呢?年大而月小的,則是減,程序中用flag標示 */
/************************************************************************/
if (maxdate.month<mindate.month)
{
maxmonth=mindate.month;
minmonth=maxdate.month;
flag=-1;
}
else
{
maxmonth=maxdate.month;
minmonth=mindate.month;
flag=1;
}

/************************************************************************/
/* 從mindate.year開始累加到maxdate.year */
/************************************************************************/
for(int j=mindate.year;j<maxdate.year;++j)
{
if (isPrime(j)==1)
{
days+=366;
}
else
days+=365;
}

/************************************************************************/
/* 從minmonth累加到maxmonth,分閏年和平年 */
/************************************************************************/
int day;
if(isPrime(maxdate.year)==1)
{

for(int i=minmonth;i<maxmonth;i++)
{
day=primeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
else
{
for (int i=minmonth;i<maxmonth;i++)
{
day=notPrimeMonth[i-1]*flag;
days=days+day;
}
days=days+maxdate.day-mindate.day;
}
return days;
}

E. 急求!C語言計算天數

#include<stdio.h>
int main()
{
int yyyy,mm,dd,a,b;
scanf("%d/%d/%d",&yyyy,&mm,&dd);
a=31*(mm>1)+28*(mm>2)+31*(mm>3)+30*(mm>4)+31*(mm>5)+30*(mm>6)+31*(mm>7)+31*(mm>8)+30*(mm>9)+31*(mm>10)+30*(mm>11)+dd;
b=((yyyy%4==0)*(yyyy%100!=0)+(yyyy%400==0))*(mm>2);
printf("%d\n",a+b);
return 0;
}

F. C語言輸入年月日計算該日是該年第幾天,

//根據用戶輸入的日期計算出該日期是該年的第多少天。
#include
#include
//system("pause")
main()
{
int year,month,day,total,leap; //total總天數 ,leap用於閏年的2月天數
printf("請輸入年 月 日(按順序,中間用空格隔開):");
scanf("%d%d%d",&year,&month,&day);
if((year%4==0 && year%100!=0) || year%400==0) //判斷是否閏年,閏年2月多一天,所以閏年leap為1,平年為leap為0。
{
leap=1;
}
else
{
leap=0;
}
switch(month) //根據月份計算對應的最終天數。
{
case 1: total=day;break;
case 2: total=31*1+day;break;
case 3: total=31*1+28+leap+day;break;
case 4: total=31*2+28+leap+day;break;
case 5: total=31*2+28+leap+30*1+day;break;
case 6: total=31*3+28+leap+30*1+day;break;
case 7: total=31*3+28+leap+30*2+day;break;
case 8: total=31*4+28+leap+30*2+day;break;
case 9: total=31*5+28+leap+30*2+day;break;
case 10: total=31*5+28+leap+30*3+day;break;
case 11: total=31*6+28+leap+30*3+day;break;
case 12: total=31*6+28+leap+30*4+day;break; //12月之前的11個月中有6個31天,4個30天,2月為28天+leap。
}
if(year>=1 && year<=9999 && month>=1 && month<=12 && day>=1 && day<=31) //判斷輸入是否正解,年份最大為9999,可自行更改。
{
printf("\n\t%d月%d日止,%d年已過去%d天。\n\n",month,day,year,total);
system("pause"); //按任意鍵繼續...
}
else
{
printf("\n\t錯誤\n\n");
system("pause"); //按任意鍵繼續...
}
return 0;
}

G. C語言求兩個日期相差的天數

計算兩個年月日之間的天數,思路是分別算出日期的總天數然後相減。
要考慮閏年的情況,判斷閏年的口訣: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=1;i<y;i++)
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=1;i<m;i++)
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日的天數,然後相減

H. c語言計算從1月1號到給定日期的天數

#include<stdio.h>

#include<math.h>

int main()

{int n,m,d,i;

char mon[13][10]={"","January","February","March","April",

"May","June","July","August","September",

"October","November","December"};

scanf("%d",&n);

for(i=0;i<n;i++)

{scanf("%d%d",&m,&d);

printf("%d %s ",d,mon[m]);

}

return 0;

}

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

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=0;i<M;i++) 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天。 有了這些,寫程序不難。
未考慮公元前的年月日計算。

J. 用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:看不懂了再追問

熱點內容
安卓暢享8a怎麼拿出手機卡 發布:2024-05-10 08:18:25 瀏覽:185
怎麼搭建區域網資料庫伺服器配置 發布:2024-05-10 08:17:29 瀏覽:657
安卓系統手機怎麼解鎖 發布:2024-05-10 08:17:27 瀏覽:472
php數組循環輸出 發布:2024-05-10 08:17:18 瀏覽:677
安卓手機助手導通訊錄哪個好 發布:2024-05-10 08:15:49 瀏覽:281
安卓微信在哪裡設置 發布:2024-05-10 08:14:22 瀏覽:213
蘋果抖音如何找回安卓上傳的視頻 發布:2024-05-10 08:13:42 瀏覽:438
php學法網 發布:2024-05-10 07:56:10 瀏覽:210
雲伺服器十大品牌排行 發布:2024-05-10 07:42:41 瀏覽:546
stc單片機編程器 發布:2024-05-10 07:34:05 瀏覽:785