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

歡迎訪問 生活随笔!

生活随笔

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

linux

Linux系统时间函数

發(fā)布時間:2025/3/21 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统时间函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來說說自己在做工程過程中的一些理解:

1, 輸入time_t,輸出tm格式的函數?loctaltime(time_t) / gmtime(time_t)

  其中l(wèi)ocaltime會受時區(qū)和夏令時影響,也就是說系統(tǒng)會把函數輸入的time_t格式的值作為UTC時間,然后根據本地的TZ環(huán)境變量,進行小時的偏移得到一個tm格式的時間;

  gmtime則不做環(huán)境變量相關的處理,直接獲得tm格式的值。?

2, 輸入tm,輸出time_t格式的函數mktime()

  這個函數也受TZ環(huán)境變量的影響,確切來說受夏令時標志的影響。如果tm中tm_isdst成員為1,則在做轉化時,mk會自動獲得程序運行環(huán)境的夏令時信息,所以結果受tm成員與夏令時偏移量共同影響。

3,?字符串格式函數ctime(time_t)??asctime(tm)

  將對應的值根據本地時間環(huán)境變量打印。

以下摘自于網友的好帖子

?

系統(tǒng)函數的轉化關系如下:

?

?time_t與struct?tm之間的轉換

struct?tm?{

????int?tm_sec;??????/*Seconds?(0-60)*/

????int?tm_min;?????/*Minites?(0-59)*/

????int?tm_hour;???/*Hours?(0-23)*/

????int?tm_mday;??/*Day?of?the?month?(1-31)*/

????int?tm_mon;???/*Month?(1-12)*/

????int?tm_year;????/*Year?since?1900*/

????int?tm_wday;???/*Day?of?the?week?(Sunday?=?0)*/

????int?tm_yday;????/*Day?in?the?year?(0-365;?1?Jan?=?0)*/

????int?tm_isdst;????/*Daylight?saving?time?flag?>?0:?DST?is?in?effect;?=?0:?DST?is?not?effect;?<?0:?DST?information?not?available*/
};

結構體tm將日期和時間分解成多個獨立的字段,這樣能方便程序獲取不同的字段值來處理。字段tm_sec的上限為60而不是59,這樣的設計主要是考慮閏秒,偶爾用其將人類日歷調整至精確的天文年(所謂的回歸年)。如果程序中定義了_BSD_SOURCE測試宏,那么有glibc定義的tm結構還會包括兩個字段,一個為long?int?tm_gmtoff,用于表示時間超出UTC以東的秒數,一個為const?char*?tm_zone,用于表示時區(qū)的縮寫(例如:CEST為歐洲中部夏令時間)。

?

gmtime()和localtime()兩個函數可將time_t轉換成struct?tm。gmtime()直接將time_t分解成UTC時間的tm,localtime()需要考慮時區(qū)和夏令時的設置,具體聲明如下:

#include?<time.h>?

//?Both?return?a?pointer?to?a?statically?allocated?broker-down?time?structure?on?success,?or?NULL?on?error

struct?tm*?gmtime?(const?time_t?*timep);

struct?tm*?localtime?(const?time_t?*timep);

以上兩個函數都是非線程安全的,線程安全版本為gmtime_r()和localtime_r()

?

mktime()函數可以將struct?tm轉換成time_t,其聲明如下:

time_t?mktime?(struct?tm?*timeptr);

該函數可能會修改timeptr對應的值,至少會確保對tm_wday和tm_yday字段的設置,確保這些字段與其他字段能夠相互對應起來。同時,mktime()在進行轉換時會對時區(qū)進行設置。此外,DST設置的使用與否取決于輸入字段tm_isdst的值。

  • 若tm_isdst為0,則將這一時間視為標準時間(即,忽略夏令時)
  • 若tm_isdst大于0,則將這一時間視為夏令時
  • 若tm_isdst小于0,則試圖判定DST在每年的這一時間是否生效。這往往是眾望所歸的設置

? ?定義于/usr/share/zoneinfo中。時區(qū)的設置會影響到ctime()、localtime()、mktime()、strftime()等函數,為了獲取時區(qū)設置,這些函數都會調用tzset(3)對如下全局變量進行設置:

char?*tzname[2];?????/*Name?of?timezone?and?alternate?(DST)?timezone*/

int?daylight;????????????/*Nonzero?if?there?is?an?alternate?(DST)?timezone*/

long?timezone;???????/*Seconds?difference?between?UTC?and?local?standard?time*/

總結

以上是生活随笔為你收集整理的Linux系统时间函数的全部內容,希望文章能夠幫你解決所遇到的問題。

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