久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Linux C函數(shù)之時(shí)間函數(shù)

 開(kāi)花結(jié)果 2010-04-28

時(shí)間函數(shù)(13)

函數(shù)分類(lèi):
1. 設(shè)置時(shí)間: settimeofday, tzset
2. 獲取時(shí)間: time, ftime, gettimeofday
3. 時(shí)間格式轉(zhuǎn)換: mktime, strftime; gmtime, localtime; asctime, ctime
4. 其他: clock, difftime

asctime: 將時(shí)間和日期以字符串格式表示
頭文件: time.h
函數(shù)定義: char *asctime(const struct tm *timeptr);
說(shuō)明: asctime()將函數(shù)timeptr所指的tm結(jié)構(gòu)中的信息轉(zhuǎn)換成現(xiàn)實(shí)世界所使用的時(shí)間日期表示方法, 然后將結(jié)果以字符串形態(tài)返回. 此函數(shù)已經(jīng)由時(shí)區(qū)轉(zhuǎn)換成當(dāng)?shù)貢r(shí)間, 返回的字符串格式為: "Wed Jun 30 21:49:08 1993\n"
ctime: 將時(shí)間和日期以字符串格式表示
頭文件: time.h
函數(shù)定義: char *ctime(const time_t *timep);
說(shuō)明: ctime()同asctime()函數(shù), 只是輸入?yún)?shù)為time_t.
應(yīng)用舉例:
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t timep;
time(&timep);
printf("%s", ctime(&timep));
printf("%s", asctime(gmtime(&timep)));
return 0;
}
運(yùn)行結(jié)果:
Sun Dec 14 15:30:11 2008
Sun Dec 14 15:30:11 2008

clock: 取得進(jìn)程占用CPU的大約時(shí)間
頭文件: time.h
函數(shù)定義: clock_t clock(void);
說(shuō)明: clock()用來(lái)返回進(jìn)程所占用CPU的大約時(shí)間.

difftime: 計(jì)算時(shí)間差距
頭文件: time.h
函數(shù)定義: double difftime(time_t time1, time_t time0);
說(shuō)明: difftime()用來(lái)計(jì)算參數(shù)time1-time0, 結(jié)果以double型精確值返回. 兩個(gè)參數(shù)的時(shí)間都是以1970年1月1日0時(shí)0分0秒算起的UTC時(shí)間.

ftime: 取得目前的時(shí)間和日期
頭文件: sys/timeb.h
函數(shù)定義: int ftime(struct timeb *tp);
說(shuō)明: ftime()將日前時(shí)間日期由參數(shù)tp所指的結(jié)構(gòu)輸出. tp結(jié)構(gòu)定義如下:
struct timeb{
/* 為從1970年1月1日至今的秒數(shù) */
time_t time;
/* 為千分之一秒 */
unsigned short millitm;
/* 為目前時(shí)區(qū)和Greenwich相差的時(shí)間, 單位為單位 */
short timezone;
/* 為日光節(jié)約時(shí)間的修正狀態(tài), 若非0為啟用日光節(jié)約時(shí)間的修正 */
short dstflag;
};
無(wú)論成功還是失敗都返回0.
應(yīng)用舉例:
#include <stdio.h>
#include <sys/timeb.h>
int main(void)
{
struct timeb tp;
ftime(&tp);
printf("time: %d\n", tp.time);
printf("millitm: %d\n", tp.millitm);
printf("timezone: %d\n", tp.timezone);
printf("dstflag: %d\n", tp.dstflag);
return 0;
}
運(yùn)行結(jié)果:
time: 1229271908
millitm: 716
timezone: -480
dstflag: 0

gettimeofday: 取得目前的時(shí)間
頭文件: sys/time.h unist.d
函數(shù)定義: int gettimeofday(struct timeval *tv, struct timezone *tz);
說(shuō)明: gettimeofday()會(huì)把目前的時(shí)間用tv所指的結(jié)構(gòu)返回, 當(dāng)?shù)貢r(shí)區(qū)的信息則放到tz所指的結(jié)構(gòu)中. 成功則返回0, 失敗返回-1, 錯(cuò)誤代碼存于errno. EFAULT是指針tv和tz所指的內(nèi)存空間超出存取權(quán)限.
timeval結(jié)構(gòu)定義為:
struct timeval{
/* 為從1970年1月1日至今的秒數(shù) */
long tv_sec;
/* 微秒 */
long tv_usec;
};
timezone 結(jié)構(gòu)定義為:
struct timezone{
/* 和Greenwich時(shí)間差了多少分鐘 */
int tz_minuteswest;   
/*日光節(jié)約時(shí)間的狀態(tài)*/
int tz_dsttime;
};
上述兩個(gè)結(jié)構(gòu)都定義在/usr/include/sys/time.h, tz_dsttime所代表的狀態(tài)如下:
   DST_NONE     /*不使用*/
   DST_USA      /*美國(guó)*/
   DST_AUST     /*澳洲*/
   DST_WET      /*西歐*/
   DST_MET      /*中歐*/
   DST_EET      /*東歐*/
   DST_CAN      /*加拿大*/
   DST_GB       /*大不列顛*/
   DST_RUM      /*羅馬尼亞*/
   DST_TUR      /*土耳其*/
   DST_AUSTALT /*澳洲(1986年以后)*/

gmtime: 將秒數(shù)轉(zhuǎn)換目前的時(shí)間和日期
頭文件: time.h
函數(shù)定義: struct tm *gmtime(const time_t *timep);
說(shuō)明: gmtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成現(xiàn)實(shí)世界所使用的時(shí)間日期表示方法, 然后將結(jié)果由結(jié)構(gòu)tm返回. 結(jié)構(gòu)tm的定義為:
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
   int tm_sec   代表目前秒數(shù), 正常范圍為0-59, 但允許至61秒
   int tm_min   代表目前分?jǐn)?shù), 范圍0-59
   int tm_hour 從午夜算起的時(shí)數(shù), 范圍為0-23
   int tm_mday 目前月份的日數(shù), 范圍01-31
   int tm_mon   代表目前月份, 從一月算起, 范圍從0-11
   int tm_year   從1900年算起至今的年數(shù)
   int tm_wday   一星期的日數(shù), 從星期一算起, 范圍為0-6
   int tm_yday   從今年1月1日算起至今的天數(shù), 范圍為0-365
   int tm_isdst 日光節(jié)約時(shí)間的旗標(biāo)
此函數(shù)返回的時(shí)間日期未經(jīng)時(shí)區(qū)轉(zhuǎn)換, 是UTC時(shí)間.

localtime: 將秒數(shù)轉(zhuǎn)換當(dāng)?shù)啬壳暗臅r(shí)間和日期
頭文件: time.h
函數(shù)定義: struct *localtime(const time_t *timep);
說(shuō)明: localtime()將參數(shù)timep所指的time_t結(jié)構(gòu)中的信息轉(zhuǎn)換成真實(shí)世界所使用的時(shí)間日期表示方法, 然后將結(jié)果由結(jié)構(gòu)tm返回. 結(jié)構(gòu)tm的定義請(qǐng)參考gmtime(). 此函數(shù)返回的時(shí)間日期已經(jīng)轉(zhuǎn)換成當(dāng)?shù)貢r(shí)區(qū).

mktime: 將時(shí)間結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成經(jīng)過(guò)的秒數(shù)
頭文件: time.h
函數(shù)定義: time_t mktime(struct tm *timeptr);
說(shuō)明: mktime()用來(lái)將參數(shù)timeptr所指的tm結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)換成從1970年1月1日0時(shí)0分0秒算起至今的UTC時(shí)間所經(jīng)過(guò)的秒數(shù). 返回經(jīng)過(guò)的秒數(shù).

settimeofday: 設(shè)置目前的時(shí)間
頭文件: sys/time.h unistd.h
函數(shù)定義: settimeofday()會(huì)把目前時(shí)間設(shè)成由tv所指的結(jié)構(gòu)信息, 當(dāng)?shù)貢r(shí)區(qū)信息則設(shè)成tz所指的結(jié)構(gòu). 詳細(xì)的說(shuō)明請(qǐng)參考gettimeofday(). 注意, 只有root權(quán)限才能使用此函數(shù)修改時(shí)間. 成功則返回0, 失敗返回-1, 錯(cuò)誤代碼存于errno.
錯(cuò)誤代碼:
   EPERM   并非由root權(quán)限調(diào)用settimeofday(), 權(quán)限不夠
   EINVAL 時(shí)區(qū)或某個(gè)數(shù)據(jù)是不正確的, 無(wú)法正確設(shè)置時(shí)間

strftime: 格式化日期和時(shí)間
頭文件: time.h
函數(shù)定義: size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
說(shuō)明: strftime()會(huì)將參數(shù)tm的時(shí)間結(jié)構(gòu), 參照參數(shù)format所指定的字符串格式做轉(zhuǎn)換, 轉(zhuǎn)換后的字符串內(nèi)容將復(fù)制到參數(shù)s所指的字符串?dāng)?shù)組中, 該字符串的最大長(zhǎng)度為參數(shù)max所控制. 下面是參數(shù)format的格式指令:
   %a 當(dāng)?shù)匦瞧谌掌诘拿Q(chēng)縮寫(xiě), 如: Sun
   %A 當(dāng)?shù)匦瞧谌掌诘拿Q(chēng)縮寫(xiě), 如: Sunday
   %b 當(dāng)?shù)卦路莸目s寫(xiě)
   %B 當(dāng)?shù)卦路莸耐暾Q(chēng)
   %c 當(dāng)?shù)剡m當(dāng)?shù)娜掌谂c時(shí)間表示法
   %C 以year/100表示年份
   %d 月里的天數(shù), 表示法為01-31
   %D 相當(dāng)于"%m%d%y"格式
   %e 月里的天數(shù), 表示法為1-31
   %h 當(dāng)?shù)卦路莸目s寫(xiě)
   %H 以24小時(shí)制表示小時(shí)數(shù), 表示法為00-23
   %I 以12小時(shí)制表示小時(shí)數(shù), 表示法為01-12
   %j 一年中的天數(shù)(001-366)
   %k 以24小時(shí)制表示小時(shí)數(shù), 表示法為0-23
   %l 以12小時(shí)制表示小時(shí)數(shù), 表示法為1-12
   %m 月份(01-12)
   %M 分鐘數(shù)(00-59)
   %n 同\n
   %p 顯示對(duì)應(yīng)的AM或PM
   %P 顯示對(duì)應(yīng)的am或pm
   %r 相當(dāng)于使用"%I:%M:%S %p"格式
   %R 相當(dāng)于使用"%H:%M"格式
   %s 從1970年1月1日0時(shí)0分0秒算起至今的UTC時(shí)間所經(jīng)過(guò)的秒數(shù)
   %S 秒數(shù)(00-59)
   %t 同\t
   %T 24小時(shí)時(shí)間表示, 相當(dāng)于"%H:%M:%S"格式
   %u 一星期中的星期日期, 范圍1-7, 星期一從1開(kāi)始
   %U 一年中的星期數(shù)(00-53), 一月第一個(gè)星期日開(kāi)始為01
   %w 一星期中的星期日期, 范圍0-6, 星期日從0開(kāi)始
   %W 一年中的星期數(shù)(00-53), 一月第一個(gè)星期一開(kāi)始為01
   %x 當(dāng)?shù)剡m當(dāng)?shù)娜掌诒硎?br>   %X 當(dāng)?shù)剡m當(dāng)?shù)臅r(shí)間表示
   %y 一世紀(jì)中的年份表示
   %Y 完整的公元年份表示
   %Z 使用的時(shí)區(qū)名稱(chēng)
   %% '%'符號(hào)
返回復(fù)制到參數(shù)s所指的字符串?dāng)?shù)組的總字符數(shù), 不包括字符串結(jié)束符. 如果返回0, 表示未復(fù)制字符串到參數(shù)s內(nèi), 但不表示一定有錯(cuò)誤發(fā)生.
附加說(shuō)明: 環(huán)境變量TZ和TC_TIME會(huì)影響此函數(shù)結(jié)果.
應(yīng)用舉例:
#include <stdio.h>
#include <time.h>
int main(void)
{
char *format[] = {"%I: %M: %S %p %m/%d %a", "%x %X %Y", NULL};
char buf[30];
int i;
time_t clock;
struct tm *tm;
time(&clock);
tm = localtime(&clock);
for(i = 0; format[i] != NULL; i++)
{
   strftime(buf, sizeof(buf), format[i], tm);
   printf("%s => %s\n", format[i], buf);
}
return 0;
}
運(yùn)行結(jié)果:
%I: %M: %S %p %m/%d %a => 01: 46: 44 AM 12/15 Mon
%x %X %Y => 12/15/08 01:46:44 2008

time: 取得目前的時(shí)間
頭文件: time.h
函數(shù)定義: time_t time(time_t *t);
說(shuō)明: time()會(huì)返回從1970年1月1日從0時(shí)0分0秒算起的UTC時(shí)間到現(xiàn)在所經(jīng)過(guò)的秒數(shù). 如果t并非空指針的話, 此函數(shù)也會(huì)將返回值存到t指針?biāo)傅膬?nèi)存. 成功則返回秒數(shù), 失敗則返回(time_t-1)值, 錯(cuò)誤原因存于errno中.

tzset: 設(shè)置時(shí)區(qū)以供時(shí)間轉(zhuǎn)換
頭文件: time.h
函數(shù)定義: void tzset(void); extern char *tzname[2];
說(shuō)明: tzset()用來(lái)將環(huán)境變量TZ設(shè)給全局變量tzname, 也就是從環(huán)境變量取得目前當(dāng)?shù)氐臅r(shí)區(qū). 時(shí)間轉(zhuǎn)換函數(shù)會(huì)自動(dòng)調(diào)用此函數(shù). 若TZ為設(shè)置, tzname會(huì)依照/etc/localtime找出最接近當(dāng)?shù)氐臅r(shí)區(qū). 若TZ為NULL, 或是無(wú)法判認(rèn), 則使用UTC時(shí)區(qū). 此函數(shù)總是成功, 并且初始化tzname.

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多