Jon*_*Mee 7 c++ time standards time-t c++-chrono
我有一double秒钟.我想把它转换成一个time_t.
我找不到完成这个的标准功能.我需要time_t手工填写吗?
类型std::time_t未指定.
虽然没有定义,但这几乎总是一个整数值,它保持自UTC时间1970年1月1日00:00起的秒数(不计算闰秒).
所以,他们之间的安全铸造可能没问题.还要注意可移植性(因为它的类型没有在标准中指定)并考虑从从double转换为积分时不能适合的值.
正如Deepmax 的回答中所指出的,类型time_t是实现定义的。因此,不能保证强制转换一定会成功。值得庆幸的是,chrono 库显着提高了时间运算的能力。
为了演示如何做到这一点,我在 ideone 上放置了一个实时示例。
作为 chrono 库提供的改进功能的一个示例,包含秒的双精度数可用于直接构造chrono::duration<double>.
从那里开始,to_time_t可以在 a 上使用chrono::system_clock::time_point,所以只需用 our 构建chrono::system_clock::time_pointour即可chrono::duration<double>。
因此,在给定的秒数内,double input我们可以完成与实现无关的转换,如下所示:
chrono::system_clock::to_time_t(chrono::system_clock::time_point(chrono::duration_cast<chrono::seconds>(chrono::duration<double>(input))))
Run Code Online (Sandbox Code Playgroud)
虽然我们可以得到这个time_t(或 a ),但传统上这被认为是自协调世界时chrono::system_clock::time_point00:00:00 以来的秒数。因此,将“速度方程”的结果存储在 a 中可能会让传统主义者感到困惑。time_t
time_t如果您只是停止转换为 a 而不是转换为 a,代码的可读性将会得到提高,chrono::duration<double>因此我建议您不要再进一步:
chrono::duration<double>(input)
Run Code Online (Sandbox Code Playgroud)