将双精度转换为 time_t

Convert double to time_t

我有一个包含秒数的 double。我想将其转换为 time_t.

我找不到完成此操作的标准函数。我必须手写 time_t 吗?

std::time_t 的类型未指定。

Although not defined, this is almost always an integral value holding the number of seconds (not counting leap seconds) since 00:00, Jan 1 1970 UTC, corresponding to POSIX time.

因此,只要在它们之间进行安全转换就可以了。还要注意可移植性(因为它的类型未在标准中指定)并考虑从双精度转换为整数时无法适应的值。

计时图书馆

正如 中所指出的,time_t 的类型是实现定义的。因此,不能保证强制转换成功。 值得庆幸的是 chrono library 显着提高了时间操作的能力。

代码示例

为了演示如何做到这一点, 我放了一个 Live Example on ideone.

说明

作为 chrono 库提供的改进功能的示例, 一个包含秒的double可以用来直接构造一个chrono::duration<double>.
从那里开始,to_time_t can be used on a 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 in Coordinated Universal Time. Thus, storing the result of "” in a time_t 可能会让传统主义者感到困惑。

如果您不转换为 time_t 而只是停止转换为 chrono::duration<double>,那么您的代码的可读性将会提高,因此我建议您不要再进一步:

chrono::duration<double>(input)