假设时期与已知的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);
这应该是确定的,涉及该时钟的任何计算,因为您使用的相同的精度时钟,但它可能会失去一些在转换精度。如果你不想失去,你将不得不使用time_point
专长,使用基于double
的持续时间类型。然后在你的计算中使用它(当然,还有所有浮点数学的注意事项)。
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()
));
}
};
你读过了[N2661](http://www.open-std.org/jtc1/sc22/ WG21 /文档/文件/ 2008/n2661.htm)? – ildjarn 2012-02-10 00:10:34
“(...)分数时期时间戳,以”double“表示”什么单位?你知道这个时代吗? – 2012-02-10 00:11:40
@ R.MartinhoFernandes:它是自1970年1月1日以来的标准UNIX时代。 – mavam 2012-02-10 00:16:08