ctime , localtime , gmtime , mktime , difftime , asctime 或 tzset 子例程

用途

转换日期和时间表示的格式。

标准 C 库 (libc.a)

语法

#include <time.h>
char *ctime ( Clock)
const time_t *Clock;
struct tm *localtime (Clock)
const time_t *Clock;
struct tm *gmtime (Clock)
const time_t *Clock;
time_t mktime( Timeptr)
struct tm *Timeptr;
double difftime( Time1,  Time0)
time_t Time0, Time1;
char *asctime ( Tm)
const struct tm *Tm;
void tzset ( )
extern long int timezone;
extern int daylight;
extern char *tzname[];

描述

注意:libc.alibbsd.a链接时,请勿使用 tzset 子例程。 tzset 子例程设置名为 timezone的全局外部变量,这与 libbsd.a中的 timezone 子例程冲突。 此名称冲突可能导致不可预测的结果。

注意: 请勿使用 ctimelocaltimegmtime和 或多线程环境中的 asctime 子例程。 请参阅 ctime_r localtime_rgmtime_rasctime_r 子例程文章中的多线程替代方法。

ctime 子例程将 Clock 参数指向的时间值 (表示自 00:00:00 全球标准时间 (UTC) , 1970 年 1 月 1 以来的时间 (以秒为单位)) 转换为以下格式的 26 个字符的字符串:

Sun Sept 16 01:03:52 1973\n\0

每个字段的宽度始终与此处所示相同。

ctime 子例程调整时区和夏令时 (如果它生效)。

localtime 子例程将 Clock 参数所指向的长整数转换为 tm 结构,该参数包含自 1970 年 1 月 00:00:00 UTC 以来的时间 (以秒为单位)。 localtime 子例程调整时区和夏令时 (如果它生效)。 使用时区信息,就像 localtime 称为 tzset一样。

gmtime 子例程将 Clock 参数指向的长整数转换为包含全球标准时间 (UTC) 的 tm 结构,这是操作系统使用的时间标准。

注: UTC 是旨在替换 GMT 的国际时间标准。

tm 结构在 time.h 文件中定义,它包含以下成员:

int tm_sec;     /* Seconds (0 - 59) */
int tm_min;     /* Minutes (0 - 59) */
int tm_hour;    /* Hours (0 - 23) */
int tm_mday;    /* Day of month (1 - 31) */
int tm_mon;     /* Month of year (0 - 11) */
int tm_year;    /* Year - 1900 */
int tm_wday;    /* Day of week (Sunday = 0) */
int tm_yday;    /* Day of year (0 - 365) */
int tm_isdst;   /* Nonzero = Daylight saving time */

mktime 子例程是 localtime 子例程的反向函数。 mktime 子例程将 tm 结构转换为自 1970 年 1 月 00:00:00 UTC 以来的时间 (以秒为单位)。1 该tm_wdaytm_yday将忽略字段,并且不会将 tm 结构的其他组件限制为 /usr/include/time.h 文件中指定的范围。 值tm_isdst字段确定 mktime 子例程的下列操作:

描述
重大安全事件数量 最初假定夏令时 (DST) 未生效。
> 0 最初假定 DST 生效。
-1 主动确定 DST 是否在指定时间和本地时区生效。 本地时区信息由 tzset 子例程设置。

成功完成时, mktime 子例程将设置tm_wdaytm_yday字段。 其他字段设置为表示自 1970 年 1 月 1 以来的指定时间。 但是,这些值将强制为 /usr/include/time.h 文件中指定的范围。 终值tm_mday未设置字段,直到该字段的值tm_montm_year字段。

注: mktime 子例程无法转换 UTC 时间 00:00:00 之前, 1970 年 1 月 1 和 UTC 时间 03:14:07 之后, 2038 年 1 月 19 日的时间值。

difftime 子例程计算两个日历时间之间的差异: Time1 -Time0 参数。

asctime 子例程将 tm 结构转换为与 ctime格式相同的 26 个字符的字符串。

如果定义了 TZ 环境变量,那么其值将覆盖缺省时区,即 U.S。 东部时区。 environment 工具包含由 TZ指定的时区信息的格式。当使用 /etc/environment/etc/profile 文件中定义的值启动系统时,通常会设置 TZ 。 但是,用户也可以将其设置为用于执行备用时区转换的常规环境变量。

tzset 子例程设置 timezonedaylighttzname 外部变量以反映 TZ的设置。 tzset 子例程由 ctimelocaltime调用,也可以由应用程序显式调用。

timezone 外部变量包含 UTC 与本地标准时间之间的差值 (以秒计)。 例如,对于 U.S, timezone 的值为 5 * 60 * 60。 东部标准时间。

应应用夏令时转换时, daylight 外部变量非零。 缺省情况下,此转换遵循标准 U.S约定; 可以指定其他约定。 缺省转换算法根据 1974 年和 1975 年的 U.S. 夏令时的特殊性进行调整。

tzname 外部变量包含标准时区 (tzname [0]) 的名称以及在 "夏令时" 生效时时区的名称 (tzname [1])。 例如:

char *tzname[2] = {"EST", "EDT"};

time.h 文件包含所有这些子例程和外部以及 tm 结构的声明。

参数

描述
时钟 指定指向时间值的指针 (以秒为单位)。
时间 (Timeptr) 指定指向 tm 结构的指针。
Time1 指定指向 time_t 结构的指针。
Time0 指定指向 time_t 结构的指针。
Tm 指定指向 tm 结构的指针。

返回值

注意: 返回值指向每个调用覆盖的静态数据。

tzset 子例程不返回任何值。

mktime 子例程返回编码为 time_t类型的值的指定时间 (以秒为单位)。 如果无法表示时间,那么此函数将返回值 (time_t) -1。

localtimegmtime 子例程返回指向 struct tm的指针。

ctimeasctime 子例程返回一个指向 26 个字符的字符串的指针。

difftime 子例程返回以秒表示的差值,作为类型为 double的值。