跳转至内容

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。
华夏公益教科书