/*localtime 不可以重入*/
#include <stdlib.h>
#include <sttring.h>
#include <time.h>#include <stdio.h>
int main(int argc, char *argv[])
{
time_t tNow =time(NULL);
time_t tEnd = tNow + 1800;
//注意下面两行的区别
struct tm* ptm = localtime(&tNow);
struct tm* ptmEnd = localtime(&tEnd);
char szTmp[50] = {0};
strftime(szTmp,50,"%H:%M:%S",ptm);
char szEnd[50] = {0};
strftime(szEnd,50,"%H:%M:%S",ptmEnd);
printf("%s /n",szTmp);
printf("%s /n",szEnd);
system("PAUSE");
return EXIT_SUCCESS;
}
最后出来的结果是:
21:18:39
21:18:39
/*可重入函数*/
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
time_t tNow =time(NULL);
time_t tEnd = tNow + 1800;
//在这里修改程序
//struct tm* ptm = localtime(&tNow);
//struct tm* ptmEnd = localtime(&tEnd);
struct tm ptm = { 0 };
struct tm ptmEnd = { 0 };
localtime_r(&tNow, &ptm);
localtime_r(&tEnd, &ptmEnd);
char szTmp[50] = {0};
strftime(szTmp,50,"%H:%M:%S",&ptm);
char szEnd[50] = {0};
strftime(szEnd,50,"%H:%M:%S",&ptmEnd);
printf("%s /n",szTmp);
printf("%s /n",szEnd);
system("PAUSE");
return EXIT_SUCCESS;
}
此外:
跨平台的线程安全的localtime和gmtime
localtime()返回一个内部静态变量指针,是线程不安全的。
localtime_r()是线程安全的版本,可是Windows上没有。
boost::date_time::c_time为localtime和gmtime这些ctime函数提供了一个统一的版本.
定义为c_time中的2个静态成员函数。
头文件:c_time.hpp
命名空间:boost::date_time