localtime( )函数
void local_time() // 打印我们想要的时间格式
{
char T[40];
time_t tmpcal_ptr;
struct tm *tmp_ptr = NULL;
time(&tmpcal_ptr);
tmp_ptr = localtime(&tmpcal_ptr);//转换成当地时间
fprintf (T, "%4d 日 %2d 月 %2d 日 %2d 时 %2d 分 %2d 秒", (1900+tmp_ptr->tm_year), (1+tmp_ptr->tm_mon), tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);
printf("%s \n", T);
}
#include <stdio.h>
#include <stlib.h>
#include <time.h>
int main()
{
int cost;// 时间差
time_t tmpcal_ptr1;
time_t tmpcal_ptr2;
struct tm *tmp_ptr = NULL;
struct tm *tmp_ptr1 = NULL;
time(&tmpcal_ptr1);
sleep(120);//延时120秒
time(&tmpcal_ptr2);
tmp_ptr = localtime(&tmpcal_ptr1);//转换成当地时间
tmp_ptr1 = localtime(&tmpcal_ptr2);
// 前一个时间
printf ("after localtime, the time is:%d.%d.%d ", (1900+tmp_ptr->tm_year), (1+tmp_ptr->tm_mon), tmp_ptr->tm_mday);
printf("%d:%d:%d\n", tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec);
// 后一个时间
printf ("after localtime, the time is:%d.%d.%d ", (1900+tmp_ptr1->tm_year), (1+tmp_ptr1->tm_mon), tmp_ptr1->tm_mday);
printf("%d:%d:%d\n", tmp_ptr1->tm_hour, tmp_ptr1->tm_min, tmp_ptr1->tm_sec);
cost=difftime(tmpcal_ptr2,tmpcal_ptr1); // 得到两端时间的差值
printf("%d/n",cost);
return 0;
}
程序在Linux系统运行结果为:
2018.8.17 20.12.55
2018.8.17 20.12.55
120
发现和想的结果不一样,查询资料发现:每次只能同时使用localtime()函数一次,要不就会被重写。
因此localtime()不是可重入的。但是系统也提供了一个可重入版的函数localtime_r()。所以将程序中的
localtime()函数换成函数localtime_r()就可以得到正确的结果了。