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

Решение

В struct tmмесяцы отсчитываются от 0 в 11 (не 1 в 12), таким образом 2 март и 3 апреля, вы выводите количество дней между 28 мартаго и 1 апреляулица, который 4.

Правильная версия будет:

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

Кстати, 2004 год — високосный, поэтому в феврале было 29 дней, было два дня с 28 февраляго и 1 мартаулица (Не один).

difftime дает вам количество секунд между 02/28/2004 00:00:00 а также 03/01/2004 00:00:00 (первый день учитывается в разнице).

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]