两个用户输入时间的差异c ++
difference of two user entered time c++
我需要能够填充两个变量(一种时间变量),然后能够计算它们的差异。
经过所有搜索后,我找到了 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 的工作情况。
我需要能够填充两个变量(一种时间变量),然后能够计算它们的差异。
经过所有搜索后,我找到了 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 的工作情况。