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說明...