跳轉至內容

C 程式設計/C 參考/time.h/time_t

來自 Wikibooks,開放書籍,為開放世界而生


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

參考資料

[編輯 | 編輯原始碼]
  1. The Open Group Base Specifications Issue 7 sys/types.h. 檢索於 2009-02-13。
  2. The Year 2038 problem, Roger M. Wilcox. 檢索於 2011-03-11。
華夏公益教科書