Linux各種時間型別與時間函式提供技術文件

2022-07-21 18:57:09 字數 4956 閱讀 8122

簡介

本文旨在為了解linux各種時間型別與時間函式提供技術文件。

1、linux下常用時間型別

linux下常用時間型別有四種:time_t、struct tm、struct timeval、struct timespec

1.1 time_t時間型別

time_t型別在time.h中定義:

[cpp] view plaincopyprint?

'#ifndef __time_t

'#define __time_t

'typedef long time_t;

'#endif

可見,time_t實際是乙個長整型。其值表示為從utc(coordinated universal time)時間2023年1月1日00時00分00秒(也稱為linux系統的epoch時間)到當前時刻的秒數。由於time_t型別長度的限制,它所表示的時間不能晚於2023年1月19日03時14分07秒(utc)。為了能夠表示更久遠的時間,可用64位或更長的整形數來儲存日曆時間,這裡不作詳述。

使用time()函式獲取當前時間的time_t值,使用ctime()函式將time_t轉為當地時間字串。

備註:utc時間有時也稱為gmt時間,其實utc和gmt兩者幾乎是同一概念。它們都是指格林尼治標準時間,只不過utc的稱呼更為正式一點。兩者區別在於前者是天文上的概念,而後者是基於乙個原子鐘。

1.2 struct tm時間型別

tm結構在time.h中定義:

[cpp] view plaincopyprint?

'#ifndef _tm_defined

'struct tm;

'#define _tm_defined

'#endif

ansi c標準稱使用tm結構的這種時間表示為分解時間(broken-down time)。

使用gmtime( )和localtime( )可將time_t時間型別轉換為tm結構體;

使用mktime( )將tm結構體轉換為time_t時間型別;

使用asctime( )將struct tm轉換為字串形式。

1.3 struct timeval時間型別

timeval結構體在time.h中定義:

[cpp] view plaincopyprint?

struct tmieval;

設定時間函式settimeofday( )與獲取時間函式gettimeofday( )均使用該事件型別作為傳參。

1.4 struct timespec時間型別

timespec結構體在time.h定義:

[cpp] view plaincopyprint?

struct timespec;

2、linux下常用時間函式

linux下常用時間函式有:time( )、ctime( )、gmtime( )、localtime( )、mktime( )、asctime( )、difftime( )、gettimeofday( )、settimeofday( )

2.1 time( )函式

標頭檔案:#include

函式定義:time_t time(time_t *timer)

功能描述:該函式返回從2023年1月1日00時00分00秒至今所經過的秒數。如果time_t *timer非空指標,函式也會將返回值存到timer指標指向的記憶體。

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

例:[cpp] view plaincopyprint?

time_t seconds;

seconds = time((time_t *)null);

2.2 ctime( )函式

標頭檔案:#include

函式定義:char *ctime(const time_t *timep);

功能描述:ctime( )將引數timep指向的time_t時間資訊轉換成實際所使用的時間日期表示方法,並以字串形式返回。字串格式為:"wed jun 20 21:00:00 2012\n"。

例:[cpp] view plaincopyprint?

time_t timep;

tmep = time(null);

printf("%s\n", ctime(&timep));

2.3 gmtime( )函式

標頭檔案:#include

函式定義:struct tm *gmtime(const time_t timep)

功能描述:gmtime( )將引數timep指向的time_t時間資訊轉換成以tm結構體表示的gmt時間資訊,並以struct tm指標返回。

gmt:gmt是**時區,北京在東8區,相差8個小時,所以北京時間=gmt時間+8小時。

例:[cpp] view plaincopyprint?

int main(void)

;time_t timep;

struct tm p_tm;

timep = time(null);

p_tm = gmtime(&timep); /獲取gmt時間/

printf("%d-%d-%d ", (p_tm->tm_year+1900), (p_tm->mon+1), p_tm->tm_mday);

printf("%s %d:%d:%d\n", wday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);

}2.4 localtime( )函式

標頭檔案:#include

函式定義:struct tm *localtime(const time_t *timep);

功能描述:localtime( )將引數timep指向的time_t時間資訊轉換成以tm結構體表示的本地時區時間(如北京時間= gmt+小時)。

例:[cpp] view plaincopyprint?

int main(void)

;time_t timep;

struct tm p_tm;

timep = time(null);

p_tm = localtime(&timep); /獲取本地時區時間/

printf("%d-%d-%d ", (p_tm->tm_year+1900), (p_tm->mon+1), p_tm->tm_mday);

printf("%s %d:%d:%d\n", wday[p_tm->tm_wday], p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);

return 0;

}2.5 mktime( )函式

標頭檔案:#include

函式定義:time_t mktime(struct tm *p_tm);

功能描述:mktime( )將引數p_tm指向的tm結構體資料轉換成從2023年1月1日00時00分00秒至今的gmt時間經過的秒數。

例:[cpp] view plaincopyprint?

int main(void)

2.6 asctime( )函式

標頭檔案:#include

函式定義:char *asctime(const struct tm *p_tm);

功能描述:asctime( )將引數p_tm指向的tm結構體資料轉換成實際使用的時間日期表示方法,並以字串形式返回(與ctime函式相同)。字串格式為:"wed jun 20 21:00:00 2012\n"。

例:[cpp] view plaincopyprint?

int main(void)

2.7 difftime( )函式

標頭檔案:#include

函式定義:double difftime(time_t timep1, time_t timep2);

功能描述:difftime( )比較引數timep1和timep2時間是否相同,並返回之間相差秒數。

例:[cpp] view plaincopyprint?

int main(void)

2.8 gettimeofday( )函式

標頭檔案:#include

#include

函式定義:int gettimeofday(struct timeval tv, struct timezone tz);

功能描述:gettimeofday( )把目前的時間資訊存入tv指向的結構體,當地時區資訊則放到tz指向的結構體。

struct timezone原型:

[cpp] view plaincopyprint?

struct timezone;

例:[cpp] view plaincopyprint?

struct timeval tv;

struct timeval tz;

gettimeofday(&tv, &tz);

附:使用time函式族獲取時間並輸出指定格式字串例子(strftime( )函式):

[cpp] view plaincopyprint?

int main(void)

;time_t timep;

struct tm *p_tm;

timep = time(null);

p_tm = localtime(&timep);

strftime(strtime, sizeof(strtime), "%y-%m-%d %h:%m:%s", p_tm);

return 0;

}2.9 settimeofday( )函式

標頭檔案:#include

#include

函式定義:int settimeofday(const struct timeval *tv, const struct timezone *gz);

功能描述:settimeofday( )把當前時間設成由tv指向的結構體資料。當前地區資訊則設成tz指向的結構體資料。

例:[cpp] view plaincopyprint?

int main(void)

return 0;

mysql add days MySQL 時間函式

a.timestampdiff 傳三個引數,第乙個時間型別如年,月,日,第二個開始時間,第三個結束時間 select test name,timestampdiff year,create time,end time y date from test table 計算時間 test name y d...

mysql sql時間函式 SQL獲取時間函式

sql獲取時間函式 datediff 引數一,引數二,引數三 引數一 year month day 引數二 比較的起始日期,預設1900 1 1 引數三 比較的日期。eg datediff year,0,getdate 表示比較0 預設1900 1 1 到當前的日期想差幾年 select datea...

時間戳與時間型別轉化 秒級時間戳

注意 本文秒級時間戳的轉化,日期時間戳轉化可檢視 1 當前時間日期轉時間戳 import datetime import time now datetime.datetime.now print now print now.timetuple time stamp time.mktime now.t...