Code Bye

关于localtime(&timep)取时间计算的问题求帮助解决

定义了这样一个取时间的函数
tm *TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm *tim1;
tm *tim2;
先取tim1=TIME();
再取tim2=TIME();
结果time1取到的时间的值变成了tim2的值!这个应该怎么改。
本人需要取两次时间然后求两个时间之间的差值。
解决方案

15

http://en.cppreference.com/w/c/chrono/localtime
里面说到了:1) pointer to a static internal tm object on success, or null pointer otherwise. The structure may be shared between gmtime, localtime, and ctime and may be overwritten on each invocation.
就是你下一次获取时间会改变共享的那个变量值
解决办法可以返回tm,而不是指针:
tm TIME()
{
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep);
return p;
}
tm tim1;
tm tim2;
先取tim1=TIME();
再取tim2=TIME();

20

原因是你保存的是获取时间的指针,再下车过去时间后会更新指针指向的内容,因此你必须每次都保存时间值而不是指向它的指针

15

假如单纯求两个时间差,不需要localtime,time(&tm1) – time(&tm2);
假如要获取开始时间和结束时间,建议用struct tm变量,而不是用指针;

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于localtime(&timep)取时间计算的问题求帮助解决