将double转换为time_t

Convert double to time_t

本文关键字:time double 转换      更新时间:2023-10-16

我有一个包含秒的double。我想把它转换成time_t

我找不到实现这一点的标准函数。我必须手工填写time_t吗?

未指定std::time_t的类型。

虽然没有定义,但这几乎总是一个积分值自1月1日00:00以来的秒数(不包括闰秒)1970 UTC,对应POSIX时间。

所以,只要在他们之间安全地选角就可以了。还要注意可移植性(因为标准中没有指定它的类型),并考虑在从二重转换为积分时无法拟合的值。

Chrono Library

正如deepmax的回答中所指出的,time_t的类型是实现定义的。因此,演员阵容并不一定会成功。值得庆幸的是,chrono库显著提高了时间运算的能力。

代码示例

为了演示如何做到这一点,我在ideone上放了一个活生生的例子。

解释

作为由chrono库提供的改进的能力的示例,可以使用包含秒的双精度来直接构建CCD_ 6
从那里,to_time_t可以在chrono::system_clock::time_point上使用,所以这只是用chrono::duration<double>构建chrono::system_clock::time_point的问题
因此,如果在double input中有几秒钟的时间,我们就可以完成一个实现独立的转换,如下所示:

chrono::system_clock::to_time_t(chrono::system_clock::time_point(chrono::duration_cast<chrono::seconds>(chrono::duration<double>(input))))

简化

虽然我们可以得到这个time_t(或chrono::system_clock::time_point),但传统上这被认为是协调世界时00:00:00以来的秒数。因此,将"速度方程"的结果存储在time_t中可能会让传统主义者感到困惑。

如果您不转换为time_t,而只是停止转换为chrono::duration<double>,那么代码的可读性就会得到提高,因此我建议您只需:

chrono::duration<double>(input)