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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux与时间相关的结构体及相关用法

發布時間:2023/12/13 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux与时间相关的结构体及相关用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

1. Linux下與時間有關的結構體
????????struct timeval
???????{ ?
???????????int tv_sec; ?
???????????int tv_usec; ?
???????}; ?
???????其中tv_sec是由凌晨開始算起的秒數,tv_usec則是微秒(10E-6 second)。 ?

???????struct timezone
???????{ ?
???????????int tv_minuteswest; ?
???????????int tv_dsttime; ?
???????}; ?
???????tv_minuteswest是格林威治時間往西方的時差,tv_dsttime則是時間的修正方式。 ?

???????struct timespec ?
???????{ ?
???????????long int tv_sec; ?
???????????long int tv_nsec; ?
???????}; ?
???????tv_nsec是nano second(10E-9 second)。 ?

???????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; ?
???????}; ?
???????tm_sec表「
」數,在[0,61]之間,多出來的兩秒是用來處理跳秒問題用的。 ?
????????tm_min表「
」數,在[0,59]之間。 ?
???????tm_hour表「
」數,在[0,23]之間。 ?
???????tm_mday表「
本月第幾日
」,在[1,31]之間。 ?
???????tm_mon表「
本年第幾月
」,在[0,11]之間。 ?
???????tm_year要加1900表示那一年。 ?
???????tm_wday表「
本第幾日
」,在[0,6]之間。 ?
???????tm_yday表「
本年第幾日
」,在[0,365]之間,閏年有366日。 ?
???????tm_isdst表是否為「
日光節約時間
」。 ?

???????struct ?itimerval
???????{
?????????struct ?timeval it_interval;
?????????struct ?timeval it_value;
???????};
???????it_interval成員表示間隔計數器的初始值,而it_value成員表示間隔計數器的當前值。

??????? 2.獲得當前時間
???????在所有的UNIX下,都有個time()的函數 ?
??????time_t time(time_t *t);
??????這個函數會傳回從epoch開始計算起的秒數,如果t是non-null,它將會把時間值填入t中。 ?

???????對某些需要較高精準度的需求,Linux提供了gettimeofday()。 ?
??????int gettimeofday(struct timeval * tv,struct timezone *tz); ?
??????int settimeofday(const struct timeval * tv,const struct timezone *tz); ?

??????struct tm格式時間函數 ?

??????struct tm * gmtime(const time_t * t); ?
??????轉換成格林威治時間。有時稱為GMT或UTC。 ?

??????struct tm * localtime(const time_t *t); ?
??????轉換成本地時間。它可以透過修改TZ環境變數來在一臺機器中,不同使用者表示不同時間。 ?

??????time_t mktime(struct tm *tp); ?
??????轉換tm成為time_t格式,使用本地時間。 ?

??????tme_t timegm(strut tm *tp); ?
??????轉換tm成為time_t格式,使用UTC時間。 ?

??????double difftime(time_t t2,time_t t1); ?
??????計算秒差。 ?


??????3.文字時間格式函數 ?

??????char * asctime(struct tm *tp); ?
??????char * ctime(struct tm *tp); ?
??????這兩個函數都轉換時間格式為標準UNIX時間格式。 ?
??????Mon May 3 08:23:35 1999 ?

??????ctime一率使用當地時間,asctime則用tm結構內的timezone資訊來表示。 ?

??????size_t strftime(char *str,size_t max,char *fmt,struct tm *tp); ?
??????strftime有點像sprintf,其格式由fmt來指定。 ?

??????%a : 本第幾天名稱,縮寫。 ?
??????%A : 本第幾天名稱,全稱。 ?
??????%b : 月份名稱,縮寫。 ?
??????%B : 月份名稱,全稱。 ?
??????%c : 與ctime/asctime格式相同。 ?
??????%d : 本月第幾日名稱,由零算起。 ?
??????%H : 當天第幾個小時,24小時制,由零算起。 ?
??????%I : 當天第幾個小時,12小時制,由零算起。 ?
??????%j : 當年第幾天,由零算起。 ?
??????%m : 當年第幾月,由零算起。 ?
??????%M : 該小時的第幾分,由零算起。 ?
??????%p : AM或PM。 ?
??????%S : 該分鐘的第幾秒,由零算起。 ?
??????%U : 當年第幾,由第一個日開始計算。 ?
??????%W : 當年第幾,由第一個一開始計算。 ?
??????%w : 當第幾日,由零算起。 ?
??????%x : 當地日期。 ?
??????%X : 當地時間。 ?
??????%y : 兩位數的年份。 ?
??????%Y : 四位數的年份。 ?
??????%Z : 時區名稱的縮寫。 ?
??????%% : %符號。 ?

??????char * strptime(char *s,char *fmt,struct tm *tp); ?
??????如同scanf一樣,解譯字串成為tm格式。 ?

??????%h : 與%b及%B同。 ?
??????%c : 讀取%x及%X格式。 ?
??????%C : 讀取%C格式。 ?
??????%e : 與%d同。 ?
??????%D : 讀取%m/%d/%y格式。 ?
??????%k : 與%H同。 ?
??????%l : 與%I同。 ?
??????%r : 讀取"%I:%M:%S %p"格式。 ?
??????%R : 讀取"%H:%M"格式。 ?
??????%T : 讀取"%H:%M:%S"格式。 ?
??????%y : 讀取兩位數年份。 ?
??????%Y : 讀取四位數年份。 ?

??????下面舉一個小例子,說明如何獲得系統當前時間:
??????????time_t now;
??????????struct tm ?*timenow;
??????????char strtemp[255];
??????
??????????time(&now);
??????????timenow = localtime(&now);
??????????printf("recent time is : %s \n", asctime(timenow));

asctime(將時間和日期以字符串格式表示)

?

相關函數

time,ctime,gmtime,localtime

表頭文件

#include<time.h>

定義函數

char * asctime(const struct tm * timeptr);

函數說明

asctime()將參數timeptr所指的tm結構中的信息轉換成真實世界所使用的時間日期表示方法,然后將結果以字符串形態返回。此函數已經由時區轉換成當地時間,字符串格式為:“Wed Jun 30 21:49:08 1993\n”

返回值

若再調用相關的時間日期函數,此字符串可能會被破壞。此函數與ctime不同處在于傳入的參數是不同的結構。

附加說明

返回一字符串表示目前當地的時間日期。

范例

#include <time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,asctime(gmtime(&timep)));
}

執行

Sat Oct 28 02:10:06 2000

ctime(將時間和日期以字符串格式表示)

相關函數

time,asctime,gmtime,localtime

表頭文件

#include<time.h>

定義函數

char *ctime(const time_t *timep);

函數說明

ctime()將參數timep所指的time_t結構中的信息轉換成真實世界所使用的時間日期表示方法,然后將結果以字符串形態返回。此函數已經由時區轉換成當地時間,字符串格式為“Wed Jun 30 21 :49 :08 1993\n”。若再調用相關的時間日期函數,此字符串可能會被破壞。

返回值

返回一字符串表示目前當地的時間日期。

范例

#include<time.h>
main()
{
time_t timep;
time (&timep);
printf(“%s”,ctime(&timep));
}

執行

Sat Oct 28 10 : 12 : 05 2000

gettimeofday(取得目前的時間)

相關函數

time,ctime,ftime,settimeofday

表頭文件

#include <sys/time.h>
#include <unistd.h>

定義函數

int gettimeofday ( struct timeval * tv , struct timezone * tz )

函數說明

gettimeofday()會把目前的時間有tv所指的結構返回,當地時區的信息則放到tz所指的結構中。
timeval結構定義為:
struct timeval{
long tv_sec;
long tv_usec;
};
timezone 結構定義為:
struct timezone{
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

返回值

成功則返回0,失敗返回-1,錯誤代碼存于errno。附加說明EFAULT指針tv和tz所指的內存空間超出存取權限。

范例

#include<sys/time.h>
#include<unistd.h>
main(){
struct timeval tv;
struct timezone tz;
gettimeofday (&tv , &tz);
printf(“tv_sec; %d\n”, tv,.tv_sec) ;
printf(“tv_usec; %d\n”,tv.tv_usec);
printf(“tz_minuteswest; %d\n”, tz.tz_minuteswest);
printf(“tz_dsttime, %d\n”,tz.tz_dsttime);
}

執行

tv_sec: 974857339
tv_usec:136996
tz_minuteswest:-540
tz_dsttime:0

gmtime(取得目前時間和日期)

相關函數

time,asctime,ctime,localtime

表頭文件

#include<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時間。

返回值

返回結構tm代表目前UTC 時間

范例

#include <time.h>
main(){
char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
time(&timep);
p=gmtime(&timep);
printf(“%d%d%d”,(1900+p->tm_year), (1+p->tm_mon),p->tm_mday);
printf(“%s%d;%d;%d\n”, wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
}

執行

2000/10/28 Sat 8:15:38

localtime(取得當地目前時間和日期)

相關函數

time, asctime, ctime, gmtime

表頭文件

#include<time.h>

定義函數

struct tm *localtime(const time_t * timep);

函數說明

localtime()將參數timep所指的time_t結構中的信息轉換成真實世界所使用的時間日期表示方法,然后將結果由結構tm返回。結構tm的定義請參考gmtime()。此函數返回的時間日期已經轉換成當地時區。

返回值

返回結構tm代表目前的當地時間。

范例

#include<time.h>
main(){
char *wday[]={“Sun”,”Mon”,”Tue”,”Wed”,”Thu”,”Fri”,”Sat”};
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
printf (“%d%d%d ”, (1900+p->tm_year),( l+p->tm_mon), p->tm_mday);
printf(“%s%d:%d:%d\n”, wday[p->tm_wday],p->tm_hour, p->tm_min, p->tm_sec);
}

執行

2000/10/28 Sat 11:12:22

mktime(將時間結構數據轉換成經過的秒數)

相關函數

time,asctime,gmtime,localtime

表頭文件

#include<time.h>

定義函數

time_t mktime(strcut tm * timeptr);

函數說明

mktime()用來將參數timeptr所指的tm結構數據轉換成從公元1970年1月1日0時0分0 秒算起至今的UTC時間所經過的秒數。

返回值

返回經過的秒數。

范例


#include<time.h>
main()
{
time_t timep;
strcut tm *p;
time(&timep);
printf(“time() : %d \n”,timep);
p=localtime(&timep);
timep = mktime(p);
printf(“time()->localtime()->mktime():%d\n”,timep);
}

執行

time():974943297
time()->localtime()->mktime():974943297

settimeofday(設置目前時間)

相關函數

time,ctime,ftime,gettimeofday

表頭文件

#include<sys/time.h>
#include<unistd.h>

定義函數

int settimeofday ( const struct timeval *tv,const struct timezone *tz);

函數說明

settimeofday()會把目前時間設成由tv所指的結構信息,當地時區信息則設成tz所指的結構。詳細的說明請參考gettimeofday()。注意,只有root權限才能使用此函數修改時間。

返回值

成功則返回0,失敗返回-1,錯誤代碼存于errno。

錯誤代碼

EPERM 并非由root權限調用settimeofday(),權限不夠。
EINVAL 時區或某個數據是不正確的,無法正確設置時間。

time(取得目前的時間)

相關函數

ctime,ftime,gettimeofday

表頭文件

#include<time.h>

定義函數

time_t time(time_t *t);

函數說明

此函數會返回從公元1970年1月1日的UTC時間從0時0分0秒算起到現在所經過的秒數。如果t 并非空指針的話,此函數也會將返回值存到t指針所指的內存。

返回值

成功則返回秒數,失敗則返回((time_t)-1)值,錯誤原因存于errno中。

范例

#include<time.h>
mian()
{
int seconds= time((time_t*)NULL);
printf(“%d\n”,seconds);
}



#include <stdio.h>
#include <time.h>

int
main ()
{
? struct tm tm, tm2;
? char buf[255];
? time_t t1, t2;

? strptime ("Thu Feb 5 13:12:18 EST 2009", "%a %b %d %H:%M:%S EST %Y", &tm);
? strptime ("Fri Feb 6 13:11:18 EST 2009", "%a %b %d %H:%M:%S EST %Y", &tm2);

? t1 = mktime(&tm);
? t2 = mktime(&tm2);
? printf("TIME: %ld, %ld, %ld\n", t2, t1, t2-t1);
? return 0;
}?

總結

以上是生活随笔為你收集整理的Linux与时间相关的结构体及相关用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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