如果您假设它与(通常会)std::chrono::system_clock具有相同的时代,那么并且本质上只是一个.time_tto_time_tfrom_time_tstd::duration_cast
例如,此代码应打印两次相同的值(请注意,to_time_t轮数或截断是未指定的,并且duration_cast总是截断,因此可能存在 1 秒的差异):
const auto now = std::chrono::system_clock::now();
time_t time = std::chrono::system_clock::to_time_t(now);
std::cout << time << "\n";
std::cout << std::chrono::duration_cast<std::chrono::seconds>(now.time_since_epoch()).count() << "\n";
std::cout << std::chrono::system_clock::from_time_t(time).time_since_epoch().count() << "\n";
std::cout << std::chrono::system_clock::time_point(std::chrono::seconds(time)).time_since_epoch().count() << "\n";
因此,您可以相当轻松地编写自己的 to/from_time_t 函数:
constexpr time_point my_point_from_time_t(time_t value)
{
return time_point(std::chrono::seconds(value));
}
constexpr time_t my_point_to_time_t(const time_point & value)
{
return std::chrono::duration_cast<std::chrono::seconds>(value.time_since_epoch()).count();
}
如果system_clock不使用与time_tthen 相同的时期,您可以简单地调整值:
const time_t system_clock_epoch = std::chrono::system_clock::to_time_t({});
time_point my_point_from_time_t(time_t value)
{
return time_point(std::chrono::seconds(value - system_clock_epoch));
}
time_t my_point_to_time_t(const time_point & value)
{
return std::chrono::duration_cast<std::chrono::seconds>(value.time_since_epoch()).count() + system_clock_epoch;
}