C ++将当前日期和时间与当前日期和设定时间进行比较

时间:2017-10-27 02:14:49

标签: c++ c++11

我试图比较两个时间值和显示时间,直到上限,但我不知道这样做。

基本理念:

    if(now >= (today 8:15) and now <= (today 9:45) )
        ....display "first lecture ends in" (time left)
    .
    .
    else if 
    .
    .
    else 
        ....display "short break"

我无法找到任何简单的例子/解决方案,或者我认为这是错误的。我用

来区分日子
  

tm_wday

现在我想在比较时间值时区分时间间隔。

2 个答案:

答案 0 :(得分:1)

您可以使用<chrono><ctime>库来计算两个时间点之间的差异。例如:

std::tm t1;
t1.tm_year = 117;
t1.tm_mon = 10;
t1.tm_mday = 27;
t1.tm_hour = 8;
t1.tm_min = 15;
t1.tm_sec = 0;

std::tm t2;
t2.tm_year = 117;
t2.tm_mon = 10;
t2.tm_mday = 27;
t2.tm_hour = 10;
t2.tm_min = 15;
t2.tm_sec = 0;

std::time_t time_t1 = std::mktime(&t1);
std::time_t time_t2 = std::mktime(&t2);
auto start = std::chrono::system_clock::from_time_t(time_t1);
auto end = std::chrono::system_clock::from_time_t(time_t2);

auto duration = std::chrono::duration_cast<std::chrono::minutes>(end - start).count();

答案 1 :(得分:0)

Howard Hinnant的免费开源时区库与<chrono>相结合,可以使用以下语法执行此操作。enter link description here

#include "date/tz.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    auto now = make_zoned(current_zone(), system_clock::now()).get_local_time();
    auto today = floor<days>(now);    
    if ((today + 8h + 15min) <= now and now <= (today + 9h + 45min))
        std::cout << format("first lecture ends in %H:%M\n",
                            today + 9h + 45min - now);
}

这只是我的输出:

first lecture ends in 00:59

make_zoned行是获取当前当地时间的方式。 now是一种std::chrono::time_point类型,不基于任何特定时钟。

通过使用floor<days>,您可以将其截断为指示当天开始的日精度time_point。

使用C ++ 14 chrono文字,您只需将小时和分钟添加到today即可获得讲座时间。在C ++ 11中,将hours{8}替换为8h