c語言計算日期
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
unsigned char time1[] = {10, 8, 31, 9, 26 };
unsigned char time2[] = { 10, 8, 31, 9, 50 };
struct tm t1 = {0};
struct tm t2 = {0};
time_t _t1;
time_t _t2;
double diff;
t1.tm_year = time1[0] + 100;
t1.tm_mon = time1[1];
t1.tm_mday = time1[2];
t1.tm_hour = time1[3];
t1.tm_min = time1[4];
t2.tm_year = time2[0] + 100;
t2.tm_mon = time2[1];
t2.tm_mday = time2[2];
t2.tm_hour = time2[3];
t2.tm_min = time2[4];
_t1 = _mkgmtime( &t1 );
_t2 = _mkgmtime( &t2 );
diff = difftime(_t2, _t1 );
printf( "相差 %.0f 分鍾
", diff / 60 );
}
(1)c語言計算日期擴展閱讀:
C語言中有兩個相關的函數用來計算時間差,分別是:
time_t time( time_t *t) 與 clock_t clock(void)
頭文件: time.h
計算的時間單位分別為: s , ms
time_t 和 clock_t 是函數庫time.h 中定義的用來保存時間的數據結構
返回值:
1、time : 返回從公元1970年1月1號的UTC時間從0時0分0秒算起到現在所經過的秒數。如果參數 t 非空指針的話,返回的時間會保存在 t 所指向的內存。
2、clock:返回從「開啟這個程序進程」到「程序中調用clock()函數」時之間的CPU時鍾計時單元(clock tick)數。 1單元 = 1 ms。
所以我們可以根據具體情況需求,判斷採用哪一個函數。
具體用法如下例子:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
time_t c_start, t_start, c_end, t_end;
c_start = clock(); //!< 單位為ms
t_start = time(NULL); //!< 單位為s
system("pause");
c_end = clock();
t_end = time(NULL);
//!<difftime(time_t, time_t)返回兩個time_t變數間的時間間隔,即時間差
printf("The pause used %f ms by clock() ",difftime(c_end,c_start));
printf("The pause used %f s by time() ",difftime(t_end,t_start));
system("pause");
return 0;
}
因此,要計算某一函數塊的佔用時間時,只需要在執行該函數塊之前和執行完該函數塊之後調用同一個時間計算函數。再調用函數difftime()計算兩者的差,即可得到耗費時間。
Ⅱ c語言年月日計算
首先,你的閏年判斷就有問題。教你個口訣:「四年一潤,一百年不潤,四百年再潤」。
其實就可以用if(yr%4==0||yr%100!=0&&yr%400==0){那麼是閏年}
你的檢驗判斷也可以利用mont數組的,首先判斷是不是在閏年,然後判斷輸入days是不是大於的mont[mn](如果是閏年要判斷二月+1)。
Ⅲ C語言 計算日期的問題
scanf("%d,%d,%d",&year,&month,&day);
不能這么寫!
應該改成
scanf("%d%d%d",&year,&month,&day);
還有
if(leep(year)&&month>=3)
你後面的函數名用的是leap吧。。。
改成if(leap(year)&&month>=3)就可以啦
Ⅳ C語言程序設計 計算日期
#include<stdio.h>
bool isday(int day,int mouth,int year)
{
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((year%400==0)||(year%4==0&&year%100!=0)) a[1]++;
if(day>a[mouth-1]||day<1)
return true;
else
return false;
}
void main()
{
int i,year,mouth,day;
int sum,sign;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
do
{
sum=0;sign=0;
puts("請輸入年、月、日:");
scanf("%d%d%d",&year,&mouth,&day);
if(((year%400==0)||(year%4==0&&year%100!=0))&&mouth>2)
{
sum=day+1;//閏年,記得加1
}
else sum=day;
for(i=0;i<mouth-1;i++)
sum+=a[i];
if(year<1||mouth<1||mouth>12||isday(day,mouth,year))
{
puts("輸入錯誤,請重新輸入:");
sign=1;
}
}while(sign);
printf("為第%d天\n",sum);
}
Ⅳ c語言輸入一個日期,計算這個日期前一天和後一天的日期。怎麼解答
#include<stdio.h>
#include<conio.h>
/*日期存儲結構*/
typedefstructdate{
intyear; /*年*/
intmonth; /*月*/
intday; /*日*/
}date;
intdpm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};/*平年每月天數*/
/*判斷閏年1:是;0:否*/
/*閏年特點:年份是4的倍數但不是100的倍數、年份是400的倍數*/
intisLeap(intyear){
return(year%4==0&&year%100!=0)||(year%400==0);
}
/*日期校驗*/
/*日期錯誤返回1,正確返回0*/
intdateIsErr(dated){
if(d.year<1582&&d.month<10&&d.day<15)/*僅支持1582年10月15日之後的日期計算*/
return1;
if(d.month<1||d.month>12)/*月校驗*/
return1;
if(d.day<1||d.day>31)/*日初步校驗*/
return1;
if(d.month!=2&&d.day>dpm[d.month])/*非2月日校驗*/
return1;
if(d.month==2&&isLeap(d.year)&&d.day>29)/*2月閏年日校驗*/
return1;
if(d.month==2&&isLeap(d.year)==0&&d.day>28)/*2月平年日校驗*/
return1;
return0;
}
/*計算與日期start相差delta天的日期*/
datedateDelta(datestart,intdelta){
dateend=start;
if(delta>=0){/*日期start向後計算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day>dpm[end.month]){/*不斷減去整月天數,向月、年進位,直至其不超過當前月份天數*/
end.day-=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*閏年2月天數-1*/
end.day--;
end.month++;/*月進位+1*/
if(end.month==13){/*滿1年*/
end.year++;/*年進位+1*/
end.month=1;/*月歸位至1月*/
}
}
}
else{/*日期start向前計算*/
end.day=start.day+delta;/*start日加intervalDays天*/
while(end.day<1){/*不斷加整月天數,向月、年借位,直至其不小於1*/
end.month--;/*月借位-1*/
if(end.month==0){/*向年借位*/
end.year--;/*年借位-1*/
end.month=12;/*月歸位至12月*/
}
end.day+=dpm[end.month];
if(isLeap(end.year)&&end.month==2)/*閏年2月天數+1*/
end.day++;
}
}
returnend;
}
intmain(void){
datestart={2008,5,6},end;
intdelta;
if(dateIsErr(start)){
printf("日期錯誤! ");
}
else{
printf(" %4d年%2d月%2d日 ",start.year,start.month,start.day);
delta=1;
end=dateDelta(start,delta);
printf("向後 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
delta=-1;
end=dateDelta(start,delta);
printf("向前 1天 ");
printf("是 %4d年%2d月%2d日 ",end.year,end.month,end.day);
}
getch();/*屏幕暫留*/
return0;
}
輸入日期部分,題主自己寫吧。以上是核心代碼。
Ⅵ 在c語言程序中如何計算日期
是計算中間間隔的日期嗎?是的話很簡單,規定輸入的格式,然後把年月日什麼的都轉換成最低的單位,兩個日期轉換後相減就可以了。。
Ⅶ 日期計算(C語言)
怎樣巧算星期數
在日常生活和工作中,人們經常需要知道某一確定的公歷日期為星期幾?筆者經過研究,推算出一種計算方法,可以簡單地口算出近幾年中任何一天為星期幾。經過簡單計算還能確定任何公歷日期的星期數。例如:2006年11月11日是星期六,就是(11+3-1)被7整除的余數6。其中,11是所需推算的日數;3是按月份確定的月份被加數,一年中12個月的月份被加數分別為:0、3、3、6、1、4、6、2、5、0、3、5 這是一組固定不變的數字,必須熟記下來,可以永久使用。如果所推算的時間在1月份,這個被加數就是0;如果所推算的時間在2月份,這個被加數就是3;如果所推算的時間在4月份,這個被加數就是6;……以此類推。2是按年份確定的年初被減數,也就是每年第一個星期日的公歷日數,其變化規律通常是下一年的年初被減數逐年遞減1天。當這個被減數減至0時,下一年從6開始遞減,使這個被減數在0—6之間循環。例如:2005年的年初被減數為2;2006年的年初被減數為1;2007年的年初被減數為0;2008年的年初被減數為6,年初被減數一經確定,便能很快口算出這一年中的任何一天為星期幾?例如2005年12月10日的計算結果為:(12+5-2)÷7=2餘1,那麼這一天就是星期一;2006年年初被減數為1,6月29日的計算結果為:(29+4-1)÷7=4餘4,那麼這一天就是星期四。
以上計算方法中,共有三個變數,即日期數、按月份確定的被加數和按年份確定的年初被減數。其中日期數是一個隨意數字;按月份確定的被加數是一組固定數字,因而均可視為已知數。只有按年份確定的年初被減數是一個未知數。雖然在近幾年中可以按照逐年遞減1天的方法確定,但如果需要知道長時間中某一確定日期的星期數,這個年初被減數就需要進行一下簡單的計算。因為在正常年份,一年365天恰好是365天÷7=52餘1即52個星期零1天,把這餘下的一天推到下一年,就形成了下一年的年初被減數,形成年初被減數的另一個原因是由於閏年所增加的日數,因為公歷閏年是很有規則的,即能被4整除且不能被100整除;或者能被400整除的年份為閏年,閏年年份為366天。根據這些條件,我們可以推算出公元紀年中任何一個年份之前所有閏年日數的累加數,我們把每年52個星期餘下的1天和由於閏年所增加的日數累加起來,合稱為積數,用這個積數便可以計算出這一年的年初被減數,計算方法是:
① 計算積數,計算公式是
積數=(年份-1)+INT[(年份-1)÷4]—INT[(年份-1)÷100]
上式中INT是一個取整函數,即其後邊括弧內的計算結果只取其整
數部分。
② 用這個積數減去7的若干倍數,直至減到出現負數為止,這個負數
的絕對值(小於7)就是這個年份的年初被減數。
有了這個年初被減數,我們就可以計算出公元紀年中任何一天的星期
數。例如:1974年3月21日的星期數為:
①積數=1973+INT(1973÷4)+ INT(1973÷400)—INT((年份-1)÷100)=2451
②年初被減數=|2451—7×351|=6
那麼這一天為:(21+3-6) ÷7=2餘4即星期四。
注意:因為公元閏年所增加的一天都是固定地安排在二月份,所以閏年二月份為29天,常年為28天。這樣,在計算閏年年份某一確定的星期日數時,就要以二月份為界限,即1月份和2月份的年初被減數比上一年少1天,3月以後的年初被減數比上一年少2天。
Ⅷ 如何用c語言編輯計算日期差的程序
結果:
相差569天
#include <stdio.h>
#ifndef __SDATE__
#define __SDATE__
struct SDate {
short int year;
short int month;
short int day;
};
#endif
int IsLeapYear(short year);
int DaysOfOneYear(SDate sd);
int SDateToAbsDays(SDate sd);
int IsLeapYear(short year) {
return year%4==0&&year%100||year%400==0;
}
int DaysOfOneYear(SDate sd) {
switch(sd.month-1) {
case 11:
sd.day+=30;
case 10:
sd.day+=31;
case 9:
sd.day+=30;
case 8:
sd.day+=31;
case 7:
sd.day+=31;
case 6:
sd.day+=30;
case 5:
sd.day+=31;
case 4:
sd.day+=30;
case 3:
sd.day+=31;
case 2:
sd.day+=IsLeapYear(sd.year)?29:28;
case 1:
sd.day+=31;
}
return sd.day;
}
int SDateToAbsDays(SDate sd) {
int years = sd.year -1;
int days = years*365 + years/4 - years/100 + years/400;
days+=DaysOfOneYear(sd);
return days;
}
int main()
{
SDate d1={2008,3,16},d2={2009,10,6};
int day=SDateToAbsDays(d2)-SDateToAbsDays(d1);
printf("相差%d天\n",day);
}
Ⅸ 用c語言編寫一程序,用戶輸入日期,計算該日是今年的第幾天
#include"stdio.h"
#include"stdlib.h"
intmain()
{
intday,month,year,sum,leap;
printf(" pleaseinputyear,month,day ");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先計算某月以前月份的總天數*/
{
case1:sum=0;break;
case2:sum=31;break;
case3:sum=59;break;
case4:sum=90;break;
case5:sum=120;break;
case6:sum=151;break;
case7:sum=181;break;
case8:sum=212;break;
case9:sum=243;break;
case10:sum=273;break;
case11:sum=304;break;
case12:sum=334;break;
default:printf("dataerror ");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("Itisthe%dthday. ",sum);
return0;
}
(9)c語言計算日期擴展閱讀
C語言輸入任意一個日期的年、月、日的值,求出是星期幾並輸出。
#include<stdio.h>
voidmain()
{
inty,m,d,c,s,w;
printf("請輸入8位年月日,以空格隔開:");
scanf("%d%d%d",&y,&m,&d);
if(m==1)c=d;
elseif(m==2)c=31+d;
elseif(m==3)c=31+28+d;
elseif(m==4)c=31+28+31+d;
elseif(m==5)c=31+28+31+30+d;
elseif(m==6)c=31+28+31+30+31+d;
elseif(m==7)c=31+28+31+30+31+30+d;
elseif(m==8)c=31+28+31+30+31+30+31+d;
elseif(m==9)c=31+28+31+30+31+30+31+31+d;
elseif(m==10)c=31+28+31+30+31+30+31+31+30+d;
elseif(m==11)c=31+28+31+30+31+30+31+31+30+31+d;
elseif(m==12)c=31+28+31+30+31+30+31+31+30+31+30+d;
if(m>2)
{if(y%100==0){if(y%400==0)c=c+1;}
elseif(y%4==0)c=c+1;}
s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c;
w=s%7;
switch(w)
{
case0:printf("星期日");break;
case1:printf("星期一");break;
case2:printf("星期二");break;
case3:printf("星期三");break;
case4:printf("星期四");break;
case5:printf("星期五");break;
case6:printf("星期六");break;
printf(" ");
}
}