Linux時間操作

2021-07-31 15:35:28 字數 3624 閱讀 1770

在嵌入式開發平台中,經常會用到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...