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。