我试图比较两个时间值和显示时间,直到上限,但我不知道这样做。
基本理念:
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
现在我想在比较时间值时区分时间间隔。
答案 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)
<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
。