新聞中心
c語(yǔ)言 如何輸入一個(gè)日期,并且比較其與系統(tǒng)日期的早晚?
c使用ctime,具體使用方法搜一下
發(fā)展壯大離不開(kāi)廣大客戶長(zhǎng)期以來(lái)的信賴與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及高空作業(yè)車租賃等,在網(wǎng)站建設(shè)公司、成都營(yíng)銷網(wǎng)站建設(shè)、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開(kāi)發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
函數(shù) sturct tm *localtime(const time_t *time)來(lái)獲得本地時(shí)間,使用該函數(shù)時(shí),需要加頭文件time.h ;
幾個(gè)常用的時(shí)間函數(shù)
time()//取得系統(tǒng)時(shí)間
gmtime()//轉(zhuǎn)換成國(guó)標(biāo)標(biāo)準(zhǔn)之間
localtime()//轉(zhuǎn)換成本地時(shí)間
asctime()//轉(zhuǎn)換成字符形式
ctime()//轉(zhuǎn)換成字符形式
strftime()//類似于printf()
要輸入一個(gè)日期,可以定義一個(gè)結(jié)構(gòu)函數(shù),如:
struct time
{
int year;
int month;
int day;
}time;
c語(yǔ)言輸入一個(gè)日期,計(jì)算這個(gè)日期前一天和后一天的日期。怎么解答?
#include?stdio.h
#include?conio.h
/*?日期存儲(chǔ)結(jié)構(gòu)?*/
typedef?struct?date?{
int?year; /*?年?*/
int?month; /*?月?*/
int?day; /*?日?*/
}?date;
int?dpm[13]?=?{0,31,28,31,30,31,30,31,31,30,31,30,31};?/*?平年每月天數(shù)?*/
/*?判斷閏年?1:是;?0:否?*/
/*?閏年特點(diǎn):年份是4的倍數(shù)但不是100的倍數(shù)、年份是400的倍數(shù)?*/
int?isLeap?(int?year)?{
return?(year%4==0??year%100!=0)?||?(year%400==0);
}
/*?日期校驗(yàn)?*/
/*?日期錯(cuò)誤返回1,正確返回0?*/
int?dateIsErr?(date?d)?{
if?(d.year1582??d.month10??d.day15)?/*?僅支持1582年10月15日之后的日期計(jì)算?*/
return?1;
if?(d.month?1?||?d.month?12)?/*?月校驗(yàn)?*/
return?1;
if?(d.day1?||?d.day31)?/*?日初步校驗(yàn)?*/?
return?1;
if?(d.month!=2??d.daydpm[d.month])?/*?非2月日校驗(yàn)?*/?
return?1;
if?(d.month==2??isLeap?(d.year)??d.day29)?/*?2月閏年日校驗(yàn)?*/
return?1;
if?(d.month==2??isLeap?(d.year)==0??d.day28)?/*?2月平年日校驗(yàn)?*/
return?1;
return?0;
}
/*?計(jì)算與日期start相差delta天的日期?*/
date?dateDelta?(date?start,?int?delta)?{
date?end?=?start;
if?(delta=0)?{?/*?日期start向后計(jì)算?*/
end.day?=?start.day?+?delta;?/*?start日加intervalDays天?*/
while?(end.day??dpm[end.month])?{?/*?不斷減去整月天數(shù),向月、年進(jìn)位,直至其不超過(guò)當(dāng)前月份天數(shù)?*/
end.day?-=?dpm[end.month];
if?(isLeap?(end.year)??end.month==2)?/*?閏年2月天數(shù)-1?*/
end.day--;
end.month++;?/*?月進(jìn)位+1?*/
if?(end.month?==?13)?{?/*?滿1年?*/
end.year++;?/*?年進(jìn)位+1?*/
end.month?=?1;?/*?月歸位至1月?*/
}
}
}
else?{?/*?日期start向前計(jì)算?*/
end.day?=?start.day?+?delta;?/*?start日加intervalDays天?*/
while?(end.day??1)?{?/*?不斷加整月天數(shù),向月、年借位,直至其不小于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月天數(shù)+1?*/
end.day++;
}
}
return?end;
}
int?main?(void)?{
date?start?=?{2008,5,6},?end;
int?delta;
if?(dateIsErr?(start))?{
printf?("日期錯(cuò)誤!\n");
}
else?{
printf?("\t%4d年%2d月%2d日\(chéng)n",?start.year,?start.month,?start.day);
delta?=?1;
end?=?dateDelta?(start,?delta);
printf?("向后\t1天\n");
printf?("是\t%4d年%2d月%2d日\(chéng)n",?end.year,?end.month,?end.day);
delta?=?-1;
end?=?dateDelta?(start,?delta);
printf?("向前\t1天\n");
printf?("是\t%4d年%2d月%2d日\(chéng)n",?end.year,?end.month,?end.day);
}
getch?();?/*屏幕暫留*/
return?0;
}
輸入日期部分,題主自己寫吧。以上是核心代碼。
C語(yǔ)言判斷兩個(gè)日期的前后問(wèn)題
if(dt1.year!=dt2.year)
{
if(dt1.yeardt2.year)?return?1;????????????????????//判斷年相等否
if(dt1.yeardt2.year)?return?-1;
}
比如這里,如果兩個(gè)year相等,就沒(méi)有返值(當(dāng)然,這是編譯器的判斷邏輯),編譯器不會(huì)根據(jù)你上下文去統(tǒng)計(jì)邏輯的,因此會(huì)認(rèn)為你if有返值,沒(méi)有else語(yǔ)句中的返值。你將兩個(gè)邏輯中的連續(xù)if改成if ?else應(yīng)該就沒(méi)問(wèn)題了。
其實(shí),如果年月日的規(guī)則是嚴(yán)格的,那么語(yǔ)句不用這么麻煩,直接判斷
year*365+month*30+day 的大小即可判定兩個(gè)日期的關(guān)系了。
網(wǎng)站標(biāo)題:c語(yǔ)言函數(shù)比較日期的前后 c時(shí)間比較函數(shù)
本文網(wǎng)址:http://www.dlmjj.cn/article/dooocii.html