2017-10-27 21 views
2

私は2つの時間値と上限まで残っている表示時間を比較しようとしていますが、私はそれを知ることができません。現在の日時と現在の日時を比較しているC++

基本的な考え方:

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コンポーネント

との区別の日だと、今は時間値を比較しながらの時間間隔を区別します。

+1

これまでに何を試しましたか? – RobertL

+0

私はこの時点で何を試したのか分かりません。私のコードは今すぐ混乱していますので、私はその同意書の別の部分で作業していますが、手動で日付を挿入して時間に変換しようとしましたが、欲しいです。 – Avrai

+0

現在の時刻をtime()で取得し、localtime()を呼び出して現在の時刻のtm構造体を取得し、分と秒を変更してmktime()を呼び出して、あなたが作った元の現在の時間と比較することができます。 –

答えて

1

<chrono>および<ctime>ライブラリを使用して、2つの時点の差を計算することができます。たとえば:<chrono>と組み合わせる

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(); 
0

ハワードヒナントの無料のオープンソースのタイムゾーンのライブラリには、次の構文でこれを行うことができます。 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>を使用すると、それを1日の開始を示すdays-precision time_pointに切り捨てることができます。

C++ 14クロノリテラルを使用すると、todayに時間と分を追加するだけで、講義時間を取得できます。 C++ 11では、8hの代わりにhours{8}を置き換えます。

関連する問題