C 程式設計/C 參考/time.h/time_t
外觀
time_t 資料型別是 ISO C 庫中定義的用於儲存系統時間值的資料型別。此類值從標準 time() 庫函式返回。此型別是在標準 <time.h> 標頭檔案中定義的 typedef。ISO C 將 time_t 定義為算術型別,但未指定任何特定型別、範圍、解析度或編碼。對時間值應用的算術運算的含義也未指定。
Unix 和 POSIX 相容系統將 time_t 實現為整數或實數浮點型別 [1](通常是 32 位或 64 位整數),它表示自 Unix 紀元開始以來的秒數:1970 年 1 月 1 日協調世界時 (UTC) 的午夜(不包括閏秒)。一些系統正確處理負時間值,而另一些則不處理。使用帶符號 32 位 time_t 型別的系統容易受到 2038 年問題的影響。[2]
除了 time() 函式外,ISO C 還指定了其他函式和型別,用於將 time_t 系統時間值轉換為日曆時間,反之亦然。
以下 C 程式碼檢索當前時間,將其格式化為字串,並將其寫入標準輸出。
#include <stdio.h>
#include <time.h>
/*
* The result should look something like
* Fri 2008-08-22 15:21:59 WAST
*/
int main(void)
{
time_t now;
struct tm *ts;
char buf[80];
/* Get the current time */
now = time(NULL);
/* Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */
ts = localtime(&now);
strftime(buf, sizeof(buf), "%a %Y-%m-%d %H:%M:%S %Z", ts);
puts(buf);
return 0;
}
使用 GNU date,給定的 time_t 值可以轉換為等效的日曆日期
$ date -ud@1234567890 Fri Feb 13 23:31:30 UTC 2009
類似地,使用 BSD date
$ date -ur 1234567890 Fri Feb 13 23:31:30 UTC 2009
- ↑ The Open Group Base Specifications Issue 7 sys/types.h. 檢索於 2009-02-13。
- ↑ The Year 2038 problem, Roger M. Wilcox. 檢索於 2011-03-11。