Difftime始终返回0

时间:2014-06-24 08:16:28

标签: c mktime

一开始我想突出显示我已经阅读了堆栈溢出中的所有类似帖子。没有任何帮助我。

#include <stdio.h>
#include <stdlib.h>
#define _USE_32BIT_TIME_T 1
#include <time.h>

int main(void)
{
  struct tm beg;
  struct tm aft;
  beg.tm_hour=0; beg.tm_min=0; beg.tm_sec=0;
  aft.tm_hour=11; aft.tm_min=19; aft.tm_sec=19;
  long long c;
  c=difftime(mktime(&aft),mktime(&beg));
  printf("%lld",c);
  return 0;
 }

所有的时间都打印出0,但是当我试图将mktime(&amp; aft)改为现在时间(&amp; now)时,我得到了非零结果。我应该在这段代码中纠正什么?

1 个答案:

答案 0 :(得分:0)

如果传递给mktime的参数引用1970年1月1日午夜之前的日期,或者如果无法表示日历时间,则该函数返回-1 cast到type_t。 (http://msdn.microsoft.com/en-us/library/aa246472(v=vs.60).aspx

这可能导致mktime失败,因为beg和aft中的tm_year变量无效。

将此变量设置为表示1970年后一年的值会产生预期结果。

#include <stdio.h>
#include <stdlib.h>
#define _USE_32BIT_TIME_T 1
#include <time.h>

int main(void)
{
    struct tm beg = {0};
    struct tm aft = {0};

    beg.tm_hour=0; beg.tm_min=0; beg.tm_sec=0;
    beg.tm_year = 71;  //Set to 1971

    aft.tm_hour=11; aft.tm_min=19; aft.tm_sec=19;
    aft.tm_year = 71;  //Set to 1971

    long long c;
    c=difftime(mktime(&aft),mktime(&beg));
    printf("%lld",c);
        return 0;
}