简单的c ++时间程序错误

时间:2012-01-05 22:18:51

标签: c++ time

我正在弄乱时间标题并遇到错误:

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;
}

2 个答案:

答案 0 :(得分:4)

mktime是一个功能。它接受一个参数tm指针,并返回一个值time_t。它不会将其参数从一种类型转换为另一种类型。因此,在您致电mktime(timeinfo)后,您的timeinfo变量仍然是tm指针。

difftime函数预计会收到两个time_t值,因此不会接受cur_timeinfo_holdtimeinfo;他们是错误的类型。第一个变量的值来自于使用rawtimetm转换为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