2017-10-27 1 views
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> 라이브러리를 사용하여 두 시간 지점의 차이를 계산할 수 있습니다. 예를 들어 : <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

하워드 Hinnant의 무료 오픈 소스 시간대 라이브러리는 다음과 같은 구문을 사용하여이 작업을 수행 할 수 있습니다. 나를 위해 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 크로노 리터럴을 사용하면 today에 시간과 분을 추가하여 강의 시간을 얻을 수 있습니다. C++ 11에서는 8hhours{8}으로 대체하십시오.

관련 문제