c ++ 11 difftime()错误计算闰年?

时间:2016-03-17 16:11:23

标签: c++ c++11 difftime

我制作了一个简单的程序来计算两天之间的天数:

#include <stdio.h>
#include <iostream>
#include <ctime>
#include <utility>

using namespace std;
int main(){
    struct tm t1 = {0,0,0,28,2,104};
    struct tm t2 = {0,0,0,1,3,104};
    time_t x = mktime(&t1);
    time_t y = mktime(&t2);
    cout << difftime(y,x)/3600/24 << endl;

}

输出是4但是,我的预期结果是1.我可以知道问题出在哪里?

1 个答案:

答案 0 :(得分:4)

struct tm中,几个月从011(不是112)计算,因此2是三月份3是4月,您输出的是3月28日 th 和4月1日 st 之间的天数,即4。

正确的版本是:

struct tm t1 = {0, 0, 0, 28, 1, 104};
struct tm t2 = {0, 0, 0,  1, 2, 104};

顺便说一句,2004年是闰年,因此2月有29天,2月28日 th 和3月1日之间两天 (不是一个)。

difftime为您提供02/28/2004 00:00:0003/01/2004 00:00:00之间的秒数(第一天在差异中计算)。