C中两个日期之间的差异

suj*_*jin 6 c linux time.h

我试图通过使用下面的C代码来区分两个日期.

但代码总是给出差异0.帮助我到哪里犯错误.

我在linux下使用gcc编译器.

#include <stdio.h>  
#include <time.h>       
int main ()
{
  struct tm start_date;
  struct tm end_date;
  time_t start_time, end_time;
  double seconds;

  start_date.tm_hour = 0;  start_date.tm_min = 0;  start_date.tm_sec = 0;
  start_date.tm_mon = 10; start_date.tm_mday = 15; start_date.tm_year = 2013;

  end_date.tm_hour = 0;  end_date.tm_min = 0;  end_date.tm_sec = 0;
  end_date.tm_mon = 10; end_date.tm_mday = 20; end_date.tm_year = 2013;

  start_time = mktime(&start_date);
  end_time = mktime(&end_date);

  seconds = difftime(end_time, start_time);

  printf ("%.f seconds difference\n", seconds);

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑: @qchen回答帮助很多解决我的问题.还有一个疑问.以下是我的更新.从答案

  start_date.tm_hour = 0;  start_date.tm_min = 0;  start_date.tm_sec = 0;
  start_date.tm_mon = 10-1; start_date.tm_mday = 18; start_date.tm_year = 2013-1876;

  end_date.tm_hour = 0;  end_date.tm_min = 0;  end_date.tm_sec = 0;
  end_date.tm_mon = 10-1; end_date.tm_mday = 20; end_date.tm_year = 2013-1876;
Run Code Online (Sandbox Code Playgroud)

tm_year是自1900年以来的一年,那么为什么我得到正确的输出,如果我在1876年到2012年之间取代1876年.

qxi*_*ixp 3

问题是 tm_year 是自 1900 年以来的年份,因此 2013 年将是 113 http://en.cppreference.com/w/cpp/chrono/c/tm

  start_date.tm_hour = 0;  start_date.tm_min = 0;  start_date.tm_sec = 0;
  start_date.tm_mon = 10; start_date.tm_mday = 15; start_date.tm_year = 113;

  end_date.tm_hour = 0;  end_date.tm_min = 0;  end_date.tm_sec = 0;
  end_date.tm_mon = 10; end_date.tm_mday = 20; end_date.tm_year = 113;
Run Code Online (Sandbox Code Playgroud)

给定 2013 年,mktime 将返回 -1,因为无法表示日历时间。你可能会认为 3913 年是一个有效的日历时间,原因与Joni 指出的2038 年问题有关。