©
本文档使用 PHP中文网手册 发布
在头文件<time.h>中定义 | ||
---|---|---|
struct tm * localtime(const time_t * time); | (1) | |
struct tm * localtime_s(const time_t *限制时间,struct tm *限制结果); | (2) | (自C11以来) |
1)以struct tm格式将历元以来的给定时间(time_t
指向的值time
)转换为以本地时间表示的日历时间。结果存储在静态存储器中,并返回指向该静态存储器的指针。
2)与(1)相同,只是该函数使用用户提供的存储result
结果,并且在运行时检测到以下错误并调用当前安装的约束处理函数:
time
或者result
是空指针
与所有边界检查的函数一样,localtime_s
只有__STDC_LIB_EXT1__
在实现定义并且用户在包含之前定义__STDC_WANT_LIB_EXT1__
为整数常量时1
才能保证可用time.h
。
时间 | - | 指向要转换的time_t对象的指针 |
---|---|---|
结果 | - | 指向结构tm对象来存储结果的指针 |
1)tm
成功时指向静态内部对象的指针,否则为空指针。该结构可以在gmtime
,localtime
和之间共享,ctime
并且可以在每次调用时被覆盖。
2)result
指针的副本或错误上的空指针(可能是运行时约束违规或将指定时间转换为本地日历时间失败)
这个函数localtime
可能不是线程安全的。
如果由于参数太大而导致失败,POSIX要求此函数设置errno
为EOVERFLOW
。
POSIX定义了一个线程安全的替代localtime_r,它与C11函数类似localtime_s
,但它不检查其输入参数的有效性。
#define __STDC_WANT_LIB_EXT1__ 1#include <time.h>#include <stdio.h> int main(void){ time_t t = time(NULL); printf("UTC: %s", asctime(gmtime(&t))); printf("local: %s", asctime(localtime(&t))); #ifdef __STDC_LIB_EXT1__ struct tm buf; char str[26]; asctime_s(str,sizeof str,gmtime_s(&t, &buf)); printf("UTC: %s", str); asctime_s(str,sizeof str,localtime_s(&t, &buf))); printf("local: %s", str);#endif}
输出:
UTC: Tue Feb 17 18:12:09 2015local: Tue Feb 17 13:12:09 2015UTC: Tue Feb 17 18:12:09 2015local: Tue Feb 17 13:12:09 2015
C11标准(ISO / IEC 9899:2011):
7.27.3.4本地时间功能(p:394)
K.3.8.2.4 localtime_s函数(p:627)
C99标准(ISO / IEC 9899:1999):
7.23.3.4本地时间功能(p:343)
C89 / C90标准(ISO / IEC 9899:1990):
4.12.3.4本地时间功能