Мне нужно уметь заполнить две переменные (своего рода переменная времени), а затем рассчитать их разницу.
после всех моих поисков я нашел difftime
, но моя проблема в том, что он использует time_t
переменные, и я не знаю, как заполнить time_t временем, которое я хочу.
например, я хочу, чтобы пользователь ввел time_1 и time_2 как (10:04, 11:05), и он сможет показывать разницу в секундах, минутах, часах и т. д. (например, 61 мин)
Я пытался как удар, но это не сработало:
#include <iostream>
#include <ctime>
using namespace std;
void main()
{
tm time_1 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
tm time_2 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
time_1.tm_hour = 10;
time_1.tm_min = 4;
time_2.tm_hour = 11;
time_2.tm_min = 5;
double diff = difftime (mktime(&time_2),mktime(&time_1));
cout << diff << endl;
system("pause");
}
std::tm
имеет следующих членов (http://en.cppreference.com/w/cpp/chrono/c/tm):
int tm_sec; // seconds after the minute – [0, 61](until C++11) / [0, 60] (since C++11)
int tm_min; // minutes after the hour – [0, 59]
int tm_hour; // hours since midnight – [0, 23]
int tm_mday; // day of the month – [1, 31]
int tm_mon; // months since January – [0, 11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday – [0, 6]
int tm_yday; // days since January 1 – [0, 365]
int tm_isds; // Daylight Saving Time flag.
Вы инициализировали только пару из этих участников. Остальные неинициализированы для обоих объектов.
Следовательно, ваша программа имеет неопределенное поведение.
Чтобы увидеть предсказуемое поведение, правильно инициализируйте объекты. Одним из способов является использование:
tm time_1 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
tm time_2 = {0, 0, 0, 1, 0, 0, 0, 0, 0};
перед чтением пользовательского ввода.
Обновить
С помощью
std::time_t t = std::time(NULL);
std::tm time_1 = *std::localtime(&t);
tm time_2 = time_1;
Инициализировать time_1
а также time_2
Кажется, работает на меня.
Посмотрите, как это работает в http://ideone.com/AmCzTu.
Других решений пока нет …