c++11 difftime() 计算闰年不正确?
c++11 difftime() calculating leap year incorrectly?
我做了一个简单的程序来计算两天之间的天数:
#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。请问问题出在哪里?
在struct tm
中,月份是从0
到11
计算的(不是1
到12
),因此2
是三月和 3
是四月,你的代码输出三月 28th 和四月 1st 之间的天数,即 4 .
正确的版本应该是:
struct tm t1 = {0, 0, 0, 28, 1, 104};
struct tm t2 = {0, 0, 0, 1, 2, 104};
顺便说一句,2004 年是闰年,因此 2 月有 29 天,2 月 28 日 之间有 两天和 1st(不是一个)。
difftime
为您提供 02/28/2004 00:00:00
和 03/01/2004 00:00:00
之间的秒数(第一天计入差异)。
我做了一个简单的程序来计算两天之间的天数:
#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。请问问题出在哪里?
在struct tm
中,月份是从0
到11
计算的(不是1
到12
),因此2
是三月和 3
是四月,你的代码输出三月 28th 和四月 1st 之间的天数,即 4 .
正确的版本应该是:
struct tm t1 = {0, 0, 0, 28, 1, 104};
struct tm t2 = {0, 0, 0, 1, 2, 104};
顺便说一句,2004 年是闰年,因此 2 月有 29 天,2 月 28 日 之间有 两天和 1st(不是一个)。
difftime
为您提供 02/28/2004 00:00:00
和 03/01/2004 00:00:00
之间的秒数(第一天计入差异)。