簡介
本文旨在為了解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...