신기원이 알려진 clock
유형과 동일하다고 가정하면 double
표현으로 재생 시간을 사용할 수 있으며 해당 시계에서 사용한 재생 시간으로 변환 할 수 있습니다. 당신이 시계와 같은 정밀도를 사용하고 있기 때문에
// change period to appropriate units - I'm assuming seconds
typedef std::chrono::duration<double, std::ratio<1>> d_seconds;
d_seconds since_epoch_full(324324.342);
auto since_epoch = std::chrono::duration_cast<clock::duration>(since_epoch_full);
clock::time_point point(since_epoch);
이는 그 시계와 관련된 모든 계산에 대한 확인을해야하지만, 변환의 정밀도의 일부가 손실 될 수 있습니다. 잃고 싶지 않다면
double
기반 지속 시간 유형을 사용하는
time_point
전문화를 사용해야합니다. 그런 다음 계산에 사용하십시오 (물론 부동 소수점 계산의 모든주의 사항 포함).
typedef std::chrono::time_point<clock, d_seconds> d_time_point;
그러나 이것은 전환이 필요하므로 동일한 시계를 포함하는 모든 계산을 복잡하게 만듭니다. 이 쉽게하려면, 당신은 변환을 수행 자신의 시계 래퍼를 구축 할 수 있으며, 그 사용 (
template <typename Clock>
struct my_clock_with_doubles {
typedef double rep;
typedef std::ratio<1> period;
typedef std::chrono::duration<rep, period> duration;
typedef std::chrono::time_point<my_clock_with_doubles<Clock>> time_point;
static const bool is_steady = Clock::is_steady;
static time_point now() noexcept {
return time_point(std::chrono::duration_cast<duration>(
Clock::now().time_since_epoch()
));
}
static time_t to_time_t(const time_point& t) noexcept {
return Clock::to_time_t(typename Clock::time_point(
std::chrono::duration_cast<typename Clock::duration>(
t.time_since_epoch()
)
));
}
static time_point from_time_t(time_t t) noexcept {
return time_point(std::chrono::duration_cast<duration>(
Clock::from_time_t(t).time_since_epoch()
));
}
};
는 읽어 본 적이 http://www.open-std.org/jtc1/sc22/를 [N2661]를 wg21/docs/papers/2008/n2661.htm)? – ildjarn
"(...) 분수 신기원 시간 소인,'double'으로 표현됨"단위는 무엇입니까? 그 시대를 아십니까? –
@ R.MartinhoFernandes : 1970 년 1 월 1 일 이래 표준 UNIX 시대입니다. – mavam