UNIX中的時間結構

2021-07-05 15:21:30 字數 3996 閱讀 1179

unix/linux下有以下幾種時間結構:

1、time_t 

型別:長整型,一般用來表示從1970-01-01 00:00:00時以來的秒數,精確度:秒;由函式time()獲取;

該型別定義在標頭檔案 /usr/include/sys/time.h 中:

#define _time_t

typedef   long   time_t;         /* time of day in seconds */

#endif  /* _time_t */

函式定義:time_t   time(time_t*  lpt);

如:time_t   time = time(null);

2、struct timeb 結構:它有兩個主要成員,乙個是秒,另乙個是毫秒;精確度:毫秒(10e-3秒);

由函式ftime()獲取struct timeb結構的時間;其定義如下:

struct timeb

#include

int  ftime(struct  timeb*  tp);

呼叫成功返回0;呼叫失敗返回-1;

3、struct  timeval 結構,它有兩個成員;乙個是秒,另乙個表示微秒,精確度:微秒(10e-6);

由函式gettime0fday()獲取;

struct  timeval結構定義為:

struct  timeval

讀取struct timeval結構資料的函式說明:

#include 

int  gettimeofday(struct  timeval*  tv,struct  timezone*  tz);

該函式會提取系統當前時間,並把時間分為秒和微秒兩部分填充到結構struct  timeval中;同時把當地的時區信

息填充到結構struct  timezone中;

返回值:成功則返回0,失敗返回-1,錯誤**存於errno。附加說明efault指標tv和tz所指的記憶體空間超出存

取許可權。

struct  timezone結構的定義為:

struct  timezone

上述兩個結構都定義在/usr/include/sys/time.h。tz_dsttime 所代表的狀態如下 

dst_none /*不使用*/ 

dst_usa /*美國*/ 

dst_aust /*澳洲*/ 

dst_wet /*西歐*/ 

dst_met /*中歐*/ 

dst_eet /*東歐*/ 

dst_can /*加拿大*/ 

dst_gb /*大不列顛*/ 

dst_rum /*羅馬尼亞*/ 

dst_tur /*土耳其*/ 

dst_austalt /*澳洲(2023年以後)*/ 

4、struct  timespec 結構:它是posix.4標準定義的乙個時間結構,精確度:納秒(10e-9秒);

由函式gethrestime()或gethrestime_lasttick()獲取當前系統struct  timespec結構的時間;其定義如下:

struct  timespec                /* definition per posix.4 */

;typedef   struct  timespec   timespec_t;

該結構定義在頭頭檔案 /usr/include/sys/time_impl.h 中;

extern   void   gethrestime(timespec_t*);

extern   void   gethrestime_lasttick(timespec_t*);

5、clock_t 型別:由函式clock()獲取;

#include 

clock_t   clock(void);

該函式以微秒的方式返回cpu的時間;

型別 clock_t 定義在標頭檔案/usr/include/sys/types.h中:

#ifndef _clock_t

#define _clock_t

typedef    long   clock_t; /* relative time in a specified resolution */

#endif  /* ifndef _clock_t */

6、struct  tm 結構:由函式gmtime()解析time_t得到

struct tm*gmtime(const time_t*timep); 

函式說明:gmtime()將引數timep 所指的time_t 結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後

將結果由結構tm返回。 

結構tm的定義為 

struct tm 

; int   tm_sec 代表目前秒數,正常範圍為0-59,但允許至61秒 

int   tm_min 代表目前分數,範圍0-59 

int   tm_hour 從午夜算起的時數,範圍為0-23 

int   tm_mday 目前月份的日數,範圍01-31 

int   tm_mon 代表目前月份,從一月算起,範圍從0-11 

int   tm_year 從1900 年算起至今的年數 

int   tm_wday 一星期的日數,從星期一算起,範圍為0-6 

int   tm_yday 從今年1月1日算起至今的天數,範圍為0-365 

int   tm_isdst 日光節約時間的旗標 

此函式返回的時間日期未經時區轉換,而是utc時間。 

返回值:返回結構tm代表目前utc 時間 

7、unix對時間單位的定義:

#define sec                1                        // 秒

#define millisec        1000                  // 毫秒

#define microsec     1000000            // 微秒

#define nanosec       1000000000      // 納秒

8、時間格式化函式:

size_t strftime(char *str,size_t max,char *fmt,struct tm *tp);  strftime有點像sprintf,其格式由fmt來指定。  

%a : 本第幾天名稱,縮寫

%a : 本第幾天名稱,全稱

%b : 月份名稱,縮寫

%b : 月份名稱,全稱

%c : 與ctime/asctime格式相同

%d : 本月第幾日名稱,由零算起

%h : 當天第幾個小時,24小時制,由零算起

%i : 當天第幾個小時,12小時制,由零算起

%j : 當年第幾天,由零算起

%m : 當年第幾月,由零算起

%m : 該小時的第幾分,由零算起

%p : am或pm

%s : 該分鐘的第幾秒,由零算起

%u : 當年第幾,由第乙個日開始計算

%w : 當年第幾,由第乙個一開始計算

%w : 當第幾日,由零算起

%x : 當地日期

%x : 當地時間

%y : 兩位數的年份

%y : 四位數的年份

%z : 時區名稱的縮寫

%% : %符號

char * strptime(char *s,char *fmt,struct tm *tp);  如同scanf一樣,解譯字串成為tm格式

%h : 與%b及%b同

%c : 讀取%x及%x格式

%c : 讀取%c格式

%e : 與%d同

%d : 讀取%m/%d/%y格式

%k : 與%h同

%l : 與%i同

%r : 讀取"%i:%m:%s %p"格式

%r : 讀取"%h:%m"格式

%t : 讀取"%h:%m:%s"格式

%y : 讀取兩位數年份

%y : 讀取四位數年份

原文**:

Python中的unix時間戳

unix時間戳可以計算兩個時間段的時間差,比如你想分析程式在什麼地方花費的時間比較多,或者分析程式的時間分布,那麼unix時間戳就不失為是乙個很好的選擇 在python中獲取當前時間的unix時間戳有很多種方式,我先說兩種我所知道的方式 下面兩種都需要import time,或者import dat...

MSSQL中UNIX時間的轉換問題

有的時候需要用到unix時間,該時間是指從 1970 01 01 00 00 00 到當前的時間的秒數,在unix裡這個叫時間戳,為了不和mssql的時間戳衝突 mssql的時間戳實際上是乙個計數器 這裡就叫unix時間。另外下面的表示式也給出了精確到毫秒級單位的unix時間轉換表示式 declar...

UNIX時間函式

include time t time time t calptr 成功返回時間值,出錯返回 1 include struct timeval intgettimeofday struct timeval restrict tp,void restrict tzp 總是返回0某些平台支援用tzp說明...