在嵌入式開發平台中,經常會用到linux時間函式的一些操作,包括時間戳的讀取、時間格式的轉換等,以下是linux時間操作中重要的函式及結構體的說明。
重要結構體:
struct tm
;
相關函式:
time()
獲取時間戳
函式原型:
time_t time( time_t
*t )
說明:返回從2023年1
月1日0
時0分0
秒起到此時鎖經過的秒數(若
t非空,則同時也儲存到
t指向的記憶體)
例:time_t timep;
// 建立
time_t 變數
time(&timep);
// 獲取時間戳
localtime()
時間戳 -> tm
結構體
函式原型:
struct tm *localtime(const time_t
*timep);
說明:將由time
函式獲取到的時間戳的值轉換為時間日期表示方法,以結構體
tm返回。
例:time_t current;
struct tm *timeinfo;
time(¤t);
timeinfo = localtime(¤t);
ps:localtime函式在多執行緒中是不安全的,或在同個流程中被重複呼叫時,之前呼叫的結果會被改寫。因此在多執行緒程式設計中,可以使用
localtime_r
函式。
localtime_r()
時間戳 -> tm
結構體
函式原型:
struct tm *localtime_r(const time_t *timep,struct tm *result);
說明:功能與localtime
相同,但在多執行緒中可以安全使用。
例:time_t current;
struct tm result = ;
time(¤t);
localtime
_r(¤t
,&result);
gmtime()
時間戳 -> tm
結構體
函式原型:
struct tm *gmtime(const time_t
*timep);
說明:將由time
函式獲取到的時間戳的值轉換為格林威治時間,以結構體
tm返回。
例:struct tm *p;
time_t timep;
time(&timep);
p = gmtime(&timep);
ps:與localtime()類似,在多執行緒程式設計中,使用
gmtime_r()
函式較安全。
asctime()
tm結構體
->
時間字串
函式原型:
char *asctime(const struct tm *tm);
說明:將tm結構體的時間轉換為字串返回
例:struct tm *p;
time_t timep;
time(&timep);
p = gmtime(&timep);
printf(
「the time is %s\n
」,asctime(p));
ctime() 時間戳
->
時間字串
函式原型:
char *ctime(const time_t *timep);
說明:將time_t
指向的資料轉換為字串返回
例:time_t timep;
// 建立
time_t 變數
printf(
「the time is %s\n
」,ctime(timep));
ps:與localtime()類似,在多執行緒程式設計中,使用
ctime_r()
函式較安全。
mktime()
tm結構體
->
時間戳
函式原型:
time_t mktime(struct tm *tm)
說明:將tm結構體轉換為時間戳
程式示例:
#include
//獲取系統當前時間
time_t
tim;
time
(&tim
);//得到的tim是乙個long,需要轉化為字串
//把當前系統時間轉化為字串
char*p
=ctime
(&tim
);
printf
("%s\n",p
);
//轉換為具體時間
struct
tm *
alltime
=gmtime
(&tim
);
printf
("%d:%d:%d\n"
,alltime
->
tm_year
+1900
,
//得到的tm_year是比1900多的年份數目,因此要加1900
alltime
->
tm_mon+1
,//tm_mon : 0~11 所以要+1
alltime
->
tm_mday
);
//時間打包
char
buf[
128];
sprintf
(buf
,"%d-%d-%d %d:%d:%d"
,alltime
->
tm_year
+1900
,
alltime
->
tm_mon+1
,
alltime
->
tm_mday
,
alltime
->
tm_hour+8
,
alltime
->
tm_min
,
alltime
->
tm_sec
);
linux時間操作
一 直接呼叫系統變數 獲取今天時期 date y m d 獲取昨天時期 date d yesterday y m d 獲取前天日期 date d 2day y m d 依次類推比如獲取10天前的日期 date d 10day y m d 二 獲取當前系統時間戳 date s 三 時間戳轉為易讀的時間...
linux核心時間操作
linux核心是通過定時器中斷來跟蹤時間流 使用 hz 巨集表示1秒的時鐘中斷次數,並使用 jiffies 及 jiffies 64 變數來記錄時鐘中斷次數,在系統引導時計數器初始化為 0 1 核心時間比較api,比較jiffies計數器 include int time after unsigne...
linux的時間操作
修改linux的時間可以使用date指令 修改日期 時間設定成2009年5月10日的命令如下 date s 05 10 2009 修改時區 找到相應的時區檔案 usr share zoneinfo asia shanghai替換當前的 etc localtime。修改 etc sysconfig c...