UNIX内核提供的基本时间服务是计算自协调世界时UTC公元1970年1月1日00:00:00这一特定时间以来经过的描述。这种秒数是以数据类型time_t表示的被称为日历时间。日历时间包括时间和日期。UNIX在这方面与其他操作系统的区别是1以协调统一时间而非本地时间计时2可自动进行转换如变换到夏令时3将时间和日期作为一个量值保存。
时间值作为函数值返回。如果参数非空则时间值也存放在由calptr指向的单元内。
POSX1.1的实时扩展增加了对多个系统时钟的支持。在Single UNIX Specification V4中控制这些时钟的接口从可选组被移至基本组。时钟通过clockid_t类型进行标识。下面将给出时钟类型标识符的标准值。
一旦取得这种从上述特定时间经过的秒数的整型时间值后通常要调用函数将其转换为分解的时间结构然后调用另一个函数生成人们可读的时间和日期。下图将说明各个时间函数之间的关系其中localtime、mktime和strftime都受到环境变量TZ的影响。点画线表示了如何从时间相关的结构获得日历时间。
两个函数localtime和gmtime将日历时间转换成分解的时间并将这些存放在一个tm结构中。
秒可以超过59的理由是可以表示润秒。注意除了月日字段其他字段的值都以0开始。如果夏令时生效则夏令标志值为正若果非夏令时时间则该标志值为0如果此信息不可用则其值为负。
localtime和gmtime之间的区别是localtime将日历时间转换成本地时间考虑到本地时区和夏令时标志而gmtime则将日历时间转换成协调统一时间的年、月、日、时、分、秒、周日分解结构。
函数strftime是一个类似于printf的时间值函数。它非常复杂可以通过可用的多个参数来定制产生的字符串。
tmptr参数是要格式化的时间值由一个指向分解时间值tm结构的指针说明。格式化结果存放在一个长度为maxsize个字符的buf数组中如果buf长度足以存放格式化结果及一个null终止符则该函数返回在buf中存放的字符数不包括null终止符否则该函数返回0。
format参数控制时间值的格式。如同printf函数一样转换说明的形式是百分号之后跟一个特定字符。format中的其他字符则按原样输出。两个连续的百分号在输出中产生一个百分号。与printf函数的不同之处是每个转换说明产生一个不同的定长输出字符串在format字符串中没有字段宽度修饰符。下面列出37中ISO C规定的转换说明。
format参数给出了buf参数指向的缓冲区内的字符串的格式。虽然与strftime函数的说明稍有不同但格式说名是类似的。strptime函数转换说明符如下

