我正在弄乱时间标题并遇到错误:
invalid conversion from 'tm*' to 'time_t'
当我尝试使用difftime函数时,您可以在底部的代码中看到错误的位置。我知道我只是在做一些愚蠢和非法的事情,但我不知道如何解决这个问题。如果有人有解决方案,请告诉我。谢谢!
程序应该获取当前时间,从用户那里获取时间输入,然后找到时差。
代码:
#include <stdio.h>
#include <time.h>
int main ()
{
time_t rawtime;
struct tm * timeinfo;
struct tm * cur_timeinfo_hold;
int year, month ,day,hour,minute,second;
double dif;
/* prompt user for time to be compared*/
printf ("Enter year: "); scanf ("%d",&year);
printf ("Enter month: "); scanf ("%d",&month);
printf ("Enter day: "); scanf ("%d",&day);
printf ("Enter hour: "); scanf ("%d",&hour);
printf ("Enter minute: "); scanf ("%d",&minute);
printf ("Enter second: "); scanf ("%d",&second);
/* get current timeinfo*/
time ( &rawtime );
timeinfo = localtime ( &rawtime );
/* print it */
printf("The present time is: "); printf(asctime (timeinfo));
/* set current time into a new variable to use for difftime, since timeinfo, will be changed */
cur_timeinfo_hold = timeinfo;
/* modify current timeinfo to the user's choice */
timeinfo->tm_year = year - 1900;
timeinfo->tm_mon = month - 1;
timeinfo->tm_mday = day;
timeinfo->tm_hour = hour;
timeinfo->tm_min = minute;
timeinfo->tm_sec = second;
mktime ( timeinfo );
/* and print it */
printf ("time to compare: "); printf(asctime (timeinfo));
/* find time difference */
//dif = difftime (cur_timeinfo_hold,timeinfo); //error: invalid conversion from 'tm*' to 'time_t'
return 0;
}
答案 0 :(得分:4)
mktime
是一个功能。它接受一个参数tm
指针,并返回一个值time_t
。它不会将其参数从一种类型转换为另一种类型。因此,在您致电mktime(timeinfo)
后,您的timeinfo
变量仍然是tm
指针。
difftime
函数预计会收到两个time_t
值,因此不会接受cur_timeinfo_hold
或timeinfo
;他们是错误的类型。第一个变量的值来自于使用rawtime
将tm
转换为localtime
指针,因此将其用于第一个参数。当您稍后调用mktime(timeinfo)
时,它返回了time_t
值,但您忽略了返回值。将返回值分配给变量,以便将其用于第二个difftime
参数。
time_t info = mktime(timeinfo);
// ...
dif = difftime(rawtime, info);
答案 1 :(得分:1)
这是因为difftime
需要原始time_t
值,而不是struct tm
结构。
原型是:
double difftime(time_t time1, time_t time0);
您需要做的是保持系统时间不变(对其执行localtime
),然后正确将用户输入的信息转换为等效的{{ 1}} time_t
(如果使用UTC时间,则为mktime
。)
然后您可以使用timegm
来获得差异。实际上,有点像:
difftime