Я делаю простую программу для подсчета количества дней между двумя днями:
#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
апреля, вы выводите количество дней между 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
(первый день учитывается в разнице).
Других решений пока нет …