1、C語言中讀取系統(tǒng)時(shí)間的函數(shù)為time(),其函數(shù)原型為:
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),藤縣企業(yè)網(wǎng)站建設(shè),藤縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,藤縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,藤縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
#include time.h
time_t time( time_t * ) ;
time_t就是long,函數(shù)返回從1970年1月1日(MFC是1899年12月31日)0時(shí)0分0秒,到現(xiàn)在的的秒數(shù)。
2、C語言還提供了將秒數(shù)轉(zhuǎn)換成相應(yīng)的時(shí)間格式的函數(shù):
char * ctime(const time_t *timer); //將日歷時(shí)間轉(zhuǎn)換成本地時(shí)間,返回轉(zhuǎn)換后的字符串指針 可定義字符串或是字符指針來接收返回值
struct tm * gmtime(const time_t *timer); //將日歷時(shí)間轉(zhuǎn)化為世界標(biāo)準(zhǔn)時(shí)間(即格林尼治時(shí)間),返回結(jié)構(gòu)體指針 可定義struct tm *變量來接收結(jié)果
struct tm * localtime(const time_t * timer); //將日歷時(shí)間轉(zhuǎn)化為本地時(shí)間,返回結(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?);
}
//時(shí)間結(jié)構(gòu)體struct?tm?說明:
struct?tm?{
int?tm_sec;?/*?秒?–?取值區(qū)間為[0,59]?*/
int?tm_min;?/*?分?-?取值區(qū)間為[0,59]?*/
int?tm_hour;?/*?時(shí)?-?取值區(qū)間為[0,23]?*/
int?tm_mday;?/*?一個(gè)月中的日期?-?取值區(qū)間為[1,31]?*/
int?tm_mon;?/*?月份(從一月開始,0代表一月)?-?取值區(qū)間為[0,11]?*/
int?tm_year;?/*?年份,其值等于實(shí)際年份減去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;?/*?夏令時(shí)標(biāo)識(shí)符,實(shí)行夏令時(shí)的時(shí)候,tm_isdst為正。不實(shí)行夏令時(shí)的進(jìn)候,tm_isdst為0;不了解情況時(shí),tm_isdst()為負(fù)。*/
};
CLOCK()函數(shù):
clock()是C/C++中的計(jì)時(shí)函數(shù),而與其相關(guān)的數(shù)據(jù)類型是clock_t。在MSDN中,查得對(duì)clock函數(shù)定義如下:
clock_t
clock(void)
;
這個(gè)函數(shù)返回從“開啟這個(gè)程序進(jìn)程”到“程序中調(diào)用clock()函數(shù)”時(shí)之間的CPU時(shí)鐘計(jì)時(shí)單元(clock
tick)數(shù),在MSDN中稱之為掛鐘時(shí)間(wal-clock);若掛鐘時(shí)間不可取,則返回-1。其中clock_t是用來保存時(shí)間的數(shù)據(jù)類型,在time.h文件中,我們可以找到對(duì)它的定義:
#ifndef
_CLOCK_T_DEFINED
typedef
long
clock_t;
#define
_CLOCK_T_DEFINED
#endif
很明顯,clock_t是一個(gè)長整形數(shù)。在time.h文件中,還定義了一個(gè)常量CLOCKS_PER_SEC,它用來表示一秒鐘會(huì)有多少個(gè)時(shí)鐘計(jì)時(shí)單元,其定義如下:
#define
CLOCKS_PER_SEC
((clock_t)1000)
可以看到每過千分之一秒(1毫秒),調(diào)用clock()函數(shù)返回的值就加1。下面舉個(gè)例子,你可以使用公式clock()/CLOCKS_PER_SEC來計(jì)算一個(gè)進(jìn)程自身的運(yùn)行時(shí)間:
void
elapsed_time()
{
printf("Elapsed
time:%u
secs.\n",clock()/CLOCKS_PER_SEC);
}
當(dāng)然,你也可以用clock函數(shù)來計(jì)算你的機(jī)器運(yùn)行一個(gè)循環(huán)或者處理其它事件到底花了多少時(shí)間:
#include
stdio.h
#include
stdlib.h
#include
time.h
int
main(void)
{
long
i
=
10000000L;
clock_t
start,
finish;
double
duration;
/*
測量一個(gè)事件持續(xù)的時(shí)間*/
printf(
"Time
to
do
%ld
empty
loops
is
",
i)
;
start
=
clock();
while(
i--
);
finish
=
clock();
duration
=
(double)(finish
-
start)
/
CLOCKS_PER_SEC;
printf(
"%f
seconds\n",
duration
);
system("pause");
}
在筆者的機(jī)器上,運(yùn)行結(jié)果如下:
Time
to
do
10000000
empty
loops
is
0.03000
seconds
上面我們看到時(shí)鐘計(jì)時(shí)單元的長度為1毫秒,那么計(jì)時(shí)的精度也為1毫秒,那么我們可不可以通過改變CLOCKS_PER_SEC的定義,通過把它定義的大一些,從而使計(jì)時(shí)精度更高呢?通過嘗試,你會(huì)發(fā)現(xiàn)這樣是不行的。在標(biāo)準(zhǔn)C/C++中,最小的計(jì)時(shí)單位是一毫秒。
time_t
time(
time_t
*timer
);
返回值是1970年到現(xiàn)在的秒數(shù)
用long型接就可以了
參數(shù)也是同樣意義
如
long
time_s
=
0;
time_s
=
time(
NULL
);
//
time_s就是1970年到現(xiàn)在的秒數(shù)
或者
long
*
time_s
=
NULL;
time(time_s);
//
*time_s就是1970年到現(xiàn)在的秒數(shù)
要計(jì)算前后一段時(shí)間的話之前取一次time,之后取一次相減就知道用了多少秒了
#include cstdio
#include ctime
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
void printTime() {
struct tm t;? ?//tm結(jié)構(gòu)指針
time_t now;? //聲明time_t類型變量
time(now);? ? ? //獲取系統(tǒng)日期和時(shí)間
localtime_s(t, now);? ?//獲取當(dāng)?shù)厝掌诤蜁r(shí)間
? ?//格式化輸出本地時(shí)間
printf("年-月-日-時(shí)-分-秒:%d-%d-%d %d:%d:%d\n", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec);
}
int main(int argc, char** argv) {
printTime();
}
需要利用C語言的時(shí)間函數(shù)time和localtime,具體說明如下:
一、函數(shù)接口介紹:
1、time函數(shù)。
形式為time_t time (time_t *__timer);
其中time_t為time.h定義的結(jié)構(gòu)體,一般為長整型。
這個(gè)函數(shù)會(huì)獲取當(dāng)前時(shí)間,并返回。 如果參數(shù)__timer非空,會(huì)存儲(chǔ)相同值到__timer指向的內(nèi)存中。
time函數(shù)返回的為unix時(shí)間戳,即從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。
由于是秒作為單位的,所以這并不是習(xí)慣上的時(shí)間,要轉(zhuǎn)為習(xí)慣上的年月日時(shí)間形式就需要另外一個(gè)函數(shù)了。
2、localtime函數(shù)。
形式為struct tm *localtime (const time_t *__timer);
其中tm為一個(gè)結(jié)構(gòu)體,包含了年月日時(shí)分秒等信息。
這種結(jié)構(gòu)是適合用來輸出的。
二、參考代碼:
#include?stdio.h
#include?time.h
int?main?()
{
time_t?t;
struct?tm?*?lt;
time?(t);//獲取Unix時(shí)間戳。
lt?=?localtime?(t);//轉(zhuǎn)為時(shí)間結(jié)構(gòu)。
printf?(?"%d/%d/%d?%d:%d:%d\n",lt-tm_year+1900,?lt-tm_mon,?lt-tm_mday,?lt-tm_hour,?lt-tm_min,?lt-tm_sec);//輸出結(jié)果
return?0;
}
注意事項(xiàng):
struct tm中的tm_year 值為實(shí)際年減去1900, 所以輸出的時(shí)候要是lt-tm_year+1900。
標(biāo)準(zhǔn)庫的time.h里有時(shí)間函數(shù)
time_t time (time_t *timer)
計(jì)算從1970年1月1日到當(dāng)前系統(tǒng)時(shí)間,并把結(jié)果返回給timer變量,
函數(shù)本身返回的也是這個(gè)結(jié)果.time_t這個(gè)類型其實(shí)就是一個(gè)int.
另有:
double difftime ( time_t timer2, time_t timer1 )
把返回time2和time1所儲(chǔ)存的時(shí)間的差.