c++ - 两个用户输入时间的差异c++

标签 c++ time ctime time-t difftime

我需要能够填充两个变量(一种时间变量),然后能够计算它们的差值。 经过所有搜索,我找到了 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_1time_2 似乎对我有用。

http://ideone.com/AmCzTu 查看它的工作情况.

关于c++ - 两个用户输入时间的差异c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36806836/

相关文章:

未找到 C++、MingW、ctime、nanosleep()?

c++11 以微秒精度获取当前时间

C++ 后续文件在第一个文件后无法打开

c++ - Objective-C 和 C++ 之间的转换比较

c++ - 为什么打印的值都是垃圾?我们如何解决这个问题?

c++ - 为什么 valgrind 说基本的 SDL 程序正在泄漏内存?

mysql - 如何在 MySQL DATETIME 字段中存储 DATE/TIME/YEAR?

c++ - ctime() 和日期/时间转换

ruby - 在 Ruby 中将两位数年份转换为四位数年份

php - 使用 javascript(和 PHP)获取 Swatch Internet Time