Skip to content

Std::chrono

표준 헤더 chrono를 포함하여 기간 및 시간 인스턴트를 나타내고 조작하는 클래스와 함수를 정의합니다.

Classes

  • duration: 시간 간격을 포함하는 유형을 설명합니다.
  • time_point: 시점을 나타내는 형식을 설명합니다.

Structure

  • common_type: duration 및 time_point의 인스턴스화에 대한 템플릿 클래스 common_type의 특수화를 설명합니다.
  • duration_values: duration 템플릿 매개 변수 Rep에 대한 특정 값을 제공합니다.
  • steady_clock: steady 클록을 나타냅니다.
  • system_clock: 시스템의 실시간 시계를 기준으로 하는 시간 형식을 나타냅니다.
  • treat_as_floating_point: 형식이 부동 소수점 형식으로 처리될 수 있는지 여부를 지정합니다.

Functions

  • duration_cast: 지정된 형식으로 duration 개체를 캐스팅합니다.
  • time_point_cast: 지정된 형식으로 time_point 개체를 캐스팅합니다.

Now Milliseconds

현재시간을 Milliseconds 단위로 획득하는 방법은 아래와 같다.

unsigned long milliseconds_since_epoch =
    std::chrono::system_clock::now().time_since_epoch() / 
    std::chrono::milliseconds(1);

OR:

auto duration = now.time_since_epoch();
auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count();

time_t convert

using namespace std;
using namespace chrono;

// time_point -> time_t
std::chrono::system_clock::time_point currTimePoint = system_clock::now();
time_t currTime = system_clock::to_time_t(currTimePoint);

// time_t -> time_point
time_t currTime = time(nullptr);
system_clock::time_point currTimePoint = system_clock::from_time_t(currTime);
#include <chrono>
#include <ctime>
#include <iostream>

template <typename Duration>
void print_time(tm t, Duration fraction) {
    using namespace std::chrono;
    std::printf("[%04u-%02u-%02u %02u:%02u:%02u.%03u]\n", t.tm_year + 1900,
                t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
                static_cast<unsigned>(fraction / milliseconds(1)));

    // VS2013's library has a bug which may require you to replace
    // "fraction / milliseconds(1)" with
    // "duration_cast<milliseconds>(fraction).count()"
}

int main() {
    using namespace std;
    using namespace std::chrono;

    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();

    tp -= duration_cast<seconds>(tp);

    time_t tt = system_clock::to_time_t(now);

    print_time(*gmtime(&tt), tp);
    print_time(*localtime(&tt), tp);
}

Category

See also

Favorite site

References


  1. Sweeper.egloos.com-cpp11_chrono.pdf 

  2. The_C++Standard_Library-Utilities-_Clocks_and_Timers.pdf