日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux C函数之时间函数

發布時間:2023/12/9 linux 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux C函数之时间函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From: http://school.cfan.com.cn/system/unix/2009-07-01/1246421513d214853.shtml


時間函數(13)

函數分類:
1. 設置時間: settimeofday, tzset
2. 獲取時間: time, ftime, gettimeofday
3. 時間格式轉換: mktime, strftime; gmtime, localtime; asctime, ctime
4. 其他: clock, difftime

asctime: 將時間和日期以字符串格式表示
頭文件: time.h
函數定義: char *asctime(const struct tm *timeptr);
說明: asctime()將函數timeptr所指的tm結構中的信息轉換成現實世界所使用的時間日期表示方法, 然后將結果以字符串形態返回. 此函數已經由時區轉換成當地時間, 返回的字符串格式為: "Wed Jun 30 21:49:08 1993"
ctime: 將時間和日期以字符串格式表示
頭文件: time.h
函數定義: char *ctime(const time_t *timep);
說明: ctime()同asctime()函數, 只是輸入參數為time_t.
應用舉例:
#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;
}
運行結果:
Sun Dec 14 15:30:11 2008
Sun Dec 14 15:30:11 2008

clock: 取得進程占用CPU的大約時間
頭文件: time.h
函數定義: clock_t clock(void);
說明: clock()用來返回進程所占用CPU的大約時間.

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

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

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

gmtime: 將秒數轉換目前的時間和日期
頭文件: time.h
函數定義: struct tm *gmtime(const time_t *timep);
說明: gmtime()將參數timep所指的time_t結構中的信息轉換成現實世界所使用的時間日期表示方法, 然后將結果由結構tm返回. 結構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?? 代表目前秒數, 正常范圍為0-59, 但允許至61秒
?? int tm_min?? 代表目前分數, 范圍0-59
?? int tm_hour 從午夜算起的時數, 范圍為0-23
?? int tm_mday 目前月份的日數, 范圍01-31
?? int tm_mon?? 代表目前月份, 從一月算起, 范圍從0-11
?? int tm_year?? 從1900年算起至今的年數
?? int tm_wday?? 一星期的日數, 從星期一算起, 范圍為0-6
?? int tm_yday?? 從今年1月1日算起至今的天數, 范圍為0-365
?? int tm_isdst 日光節約時間的旗標
此函數返回的時間日期未經時區轉換, 是UTC時間.

localtime: 將秒數轉換當地目前的時間和日期
頭文件: time.h
函數定義: struct *localtime(const time_t *timep);
說明: localtime()將參數timep所指的time_t結構中的信息轉換成真實世界所使用的時間日期表示方法, 然后將結果由結構tm返回. 結構tm的定義請參考gmtime(). 此函數返回的時間日期已經轉換成當地時區.

mktime: 將時間結構數據轉換成經過的秒數
頭文件: time.h
函數定義: time_t mktime(struct tm *timeptr);
說明: mktime()用來將參數timeptr所指的tm結構數據轉換成從1970年1月1日0時0分0秒算起至今的UTC時間所經過的秒數. 返回經過的秒數.

settimeofday: 設置目前的時間
頭文件: sys/time.h unistd.h
函數定義: settimeofday()會把目前時間設成由tv所指的結構信息, 當地時區信息則設成tz所指的結構. 詳細的說明請參考gettimeofday(). 注意, 只有root權限才能使用此函數修改時間. 成功則返回0, 失敗返回-1, 錯誤代碼存于errno.
錯誤代碼:
?? EPERM?? 并非由root權限調用settimeofday(), 權限不夠
?? EINVAL 時區或某個數據是不正確的, 無法正確設置時間

strftime: 格式化日期和時間
頭文件: time.h
函數定義: size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
說明: strftime()會將參數tm的時間結構, 參照參數format所指定的字符串格式做轉換, 轉換后的字符串內容將復制到參數s所指的字符串數組中, 該字符串的最大長度為參數max所控制. 下面是參數format的格式指令:
?? %a 當地星期日期的名稱縮寫, 如: Sun
?? %A 當地星期日期的名稱縮寫, 如: Sunday
?? %b 當地月份的縮寫
?? %B 當地月份的完整名稱
?? %c 當地適當的日期與時間表示法
?? %C 以year/100表示年份
?? %d 月里的天數, 表示法為01-31
?? %D 相當于"%m%d%y"格式
?? %e 月里的天數, 表示法為1-31
?? %h 當地月份的縮寫
?? %H 以24小時制表示小時數, 表示法為00-23
?? %I 以12小時制表示小時數, 表示法為01-12
?? %j 一年中的天數(001-366)
?? %k 以24小時制表示小時數, 表示法為0-23
?? %l 以12小時制表示小時數, 表示法為1-12
?? %m 月份(01-12)
?? %M 分鐘數(00-59)
?? %n 同
?? %p 顯示對應的AM或PM
?? %P 顯示對應的am或pm
?? %r 相當于使用"%I:%M:%S %p"格式
?? %R 相當于使用"%H:%M"格式
?? %s 從1970年1月1日0時0分0秒算起至今的UTC時間所經過的秒數
?? %S 秒數(00-59)
?? %t 同\t
?? %T 24小時時間表示, 相當于"%H:%M:%S"格式
?? %u 一星期中的星期日期, 范圍1-7, 星期一從1開始
?? %U 一年中的星期數(00-53), 一月第一個星期日開始為01
?? %w 一星期中的星期日期, 范圍0-6, 星期日從0開始
?? %W 一年中的星期數(00-53), 一月第一個星期一開始為01
?? %x 當地適當的日期表示
?? %X 當地適當的時間表示
?? %y 一世紀中的年份表示
?? %Y 完整的公元年份表示
?? %Z 使用的時區名稱
?? %% '%'符號
返回復制到參數s所指的字符串數組的總字符數, 不包括字符串結束符. 如果返回0, 表示未復制字符串到參數s內, 但不表示一定有錯誤發生.
附加說明: 環境變量TZ和TC_TIME會影響此函數結果.
應用舉例:
#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", format[i], buf);
}
return 0;
}
運行結果:
%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: 取得目前的時間
頭文件: time.h
函數定義: time_t time(time_t *t);
說明: time()會返回從1970年1月1日從0時0分0秒算起的UTC時間到現在所經過的秒數. 如果t并非空指針的話, 此函數也會將返回值存到t指針所指的內存. 成功則返回秒數, 失敗則返回(time_t-1)值, 錯誤原因存于errno中.

tzset: 設置時區以供時間轉換
頭文件: time.h
函數定義: void tzset(void); extern char *tzname[2];
說明: tzset()用來將環境變量TZ設給全局變量tzname, 也就是從環境變量取得目前當地的時區. 時間轉換函數會自動調用此函數. 若TZ為設置, tzname會依照/etc/localtime找出最接近當地的時區. 若TZ為NULL, 或是無法判認, 則使用UTC時區. 此函數總是成功, 并且初始化tzname.


總結

以上是生活随笔為你收集整理的Linux C函数之时间函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。