1、C語言中讀取系統(tǒng)時間的函數(shù)為time(),其函數(shù)原型為:
創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、成都做網(wǎng)站和四川服務(wù)器托管的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗和案例。
#include time.h
time_t time( time_t * ) ;
time_t就是long,函數(shù)返回從1970年1月1日(MFC是1899年12月31日)0時0分0秒,到現(xiàn)在的的秒數(shù)。
2、C語言還提供了將秒數(shù)轉(zhuǎn)換成相應(yīng)的時間格式的函數(shù):
char * ctime(const time_t *timer); //將日歷時間轉(zhuǎn)換成本地時間,返回轉(zhuǎn)換后的字符串指針 可定義字符串或是字符指針來接收返回值
struct tm * gmtime(const time_t *timer); //將日歷時間轉(zhuǎn)化為世界標(biāo)準(zhǔn)時間(即格林尼治時間),返回結(jié)構(gòu)體指針 可定義struct tm *變量來接收結(jié)果
struct tm * localtime(const time_t * timer); //將日歷時間轉(zhuǎn)化為本地時間,返回結(jié)構(gòu)體指針 可定義struct tm *變量來接收結(jié)果
3、例程:
#include?time.h
void?main()
{
time_t?t;
struct?tm?*pt?;
char?*pc?;
time(t);
pc=ctime(t)?;?printf("ctime:%s",?pc?);
pt=localtime(t)?;?printf("year=%d",?pt-tm_year+1900?);
}
//時間結(jié)構(gòu)體struct?tm?說明:
struct?tm?{
int?tm_sec;?/*?秒?–?取值區(qū)間為[0,59]?*/
int?tm_min;?/*?分?-?取值區(qū)間為[0,59]?*/
int?tm_hour;?/*?時?-?取值區(qū)間為[0,23]?*/
int?tm_mday;?/*?一個月中的日期?-?取值區(qū)間為[1,31]?*/
int?tm_mon;?/*?月份(從一月開始,0代表一月)?-?取值區(qū)間為[0,11]?*/
int?tm_year;?/*?年份,其值等于實際年份減去1900?*/
int?tm_wday;?/*?星期?–?取值區(qū)間為[0,6],其中0代表星期天,1代表星期一,以此類推?*/
int?tm_yday;?/*?從每年的1月1日開始的天數(shù)?–?取值區(qū)間為[0,365],其中0代表1月1日,1代表1月2日,以此類推?*/
int?tm_isdst;?/*?夏令時標(biāo)識符,實行夏令時的時候,tm_isdst為正。不實行夏令時的進(jìn)候,tm_isdst為0;不了解情況時,tm_isdst()為負(fù)。*/
};
C語言的建時間函數(shù)是 mktime(),原型在 time.h 里
調(diào)用有點繁。
下面,用我的程序輸入 年月日時分秒,調(diào)用mktime(), 就得 C語言 可直接使用的 時間, 存放在 t 里。
例如 輸入年月日時分秒: 2008 8 16 9 55 25
time_t t; 里 就有了 各種時間信息,例如星期幾...
#include stdio.h
#include time.h
void main(){
struct tm *target_time;
time_t rawtime, t;
int year,month,mday,hh,mm,ss;
time ( rawtime );
target_time = localtime ( rawtime );
printf("Please enter year month day hour minute second\n");
printf("For example: \n");
printf("2008 8 16 9 55 25\n");
scanf("%d %d %d %d %d %d", year, month, mday, hh,mm,ss);
target_time-tm_year = year - 1900;
target_time-tm_mon= month - 1;
target_time-tm_mday = mday ;
target_time-tm_hour = hh ;
target_time-tm_min = mm ;
target_time-tm_sec = ss ;
//
t = mktime (target_time);
// t is ready to use
printf("%s ",ctime(t));
}
if(dt1.year!=dt2.year)
{
if(dt1.yeardt2.year)?return?1;????????????????????//判斷年相等否
if(dt1.yeardt2.year)?return?-1;
}
比如這里,如果兩個year相等,就沒有返值(當(dāng)然,這是編譯器的判斷邏輯),編譯器不會根據(jù)你上下文去統(tǒng)計邏輯的,因此會認(rèn)為你if有返值,沒有else語句中的返值。你將兩個邏輯中的連續(xù)if改成if ?else應(yīng)該就沒問題了。
其實,如果年月日的規(guī)則是嚴(yán)格的,那么語句不用這么麻煩,直接判斷
year*365+month*30+day 的大小即可判定兩個日期的關(guān)系了。
c語言時間函數(shù):
1、獲得日歷時間函數(shù):
可以通過time()函數(shù)來獲得日歷時間(Calendar Time),其原型為:time_t time(time_t * timer);
如果已經(jīng)聲明了參數(shù)timer,可以從參數(shù)timer返回現(xiàn)在的日歷時間,同時也可以通過返回值返回現(xiàn)在的日歷時間,即從一個時間點(例如:1970年1月1日0時0分0秒)到現(xiàn)在此時的秒數(shù)。如果參數(shù)為空(NUL),函數(shù)將只通過返回值返回現(xiàn)在的日歷時間,比如下面這個例子用來顯示當(dāng)前的日歷時間:
2、獲得日期和時間函數(shù):
這里說的日期和時間就是平時所說的年、月、日、時、分、秒等信息。從第2節(jié)我們已經(jīng)知道這些信息都保存在一個名為tm的結(jié)構(gòu)體中,那么如何將一個日歷時間保存為一個tm結(jié)構(gòu)的對象呢?
其中可以使用的函數(shù)是gmtime()和localtime(),這兩個函數(shù)的原型為:
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
其中g(shù)mtime()函數(shù)是將日歷時間轉(zhuǎn)化為世界標(biāo)準(zhǔn)時間(即格林尼治時間),并返回一個tm結(jié)構(gòu)體來保存這個時間,而localtime()函數(shù)是將日歷時間轉(zhuǎn)化為本地時間。比如現(xiàn)在用gmtime()函數(shù)獲得的世界標(biāo)準(zhǔn)時間是2005年7月30日7點18分20秒,那么用localtime()函數(shù)在中國地區(qū)獲得的本地時間會比世界標(biāo)準(zhǔn)時間晚8個小時,即2005年7月30日15點18分20秒。
當(dāng)前名稱:c語言日期推移函數(shù) c語言日期相減
鏈接分享:http://vcdvsql.cn/article10/ddcohdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)、品牌網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、用戶體驗、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)