将double转换为time_t

时间:2015-06-23 10:31:50

标签: c++ time standards chrono time-t

我有double秒。我想将其转换为time_t

我无法找到完成此任务的标准功能。我必须手动填写time_t吗?

2 个答案:

答案 0 :(得分:6)

std::time_t的类型未指定。

  

虽然没有定义,但这几乎总是一个不可或缺的值   自1月1日00:00以来的秒数(不计算闰秒)   1970 UTC,对应于POSIX时间。

所以,他们之间的安全铸造可能会很好。还要注意可移植性(因为它的类型没有在标准中指定),并考虑从从double转换为积分时不能适合的值。

答案 1 :(得分:3)

Chrono Library

正如deepmax's answer所指出的,time_t的类型是实现定义的。因此,演员不能保证成功。 值得庆幸的是chrono library显着提高了时间操作的能力。

代码示例

要证明如何做到这一点, 我放了Live Example on ideone

说明

作为计时库提供的改进功能的一个例子, 包含秒的双精度数可用于直接构造chrono::duration<double> 从那里to_time_t {}可以在chrono::system_clock::time_point上使用Coordinated Universal Time,因此只需使用chrono::system_clock::time_point构建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))))

简化

虽然我们可以获得此time_t(或chrono::system_clock::time_point),但这通常被认为是a velocity equation中自00:00:00以来的秒数。因此,存储&#34; enter image description here&#34;的结果在time_t中,传统主义者可能会感到困惑。

如果您转换为time_t而不是转换为chrono::duration<double>而不是转换为chrono::duration<double>(input) ,那么您的代码的可读性会得到改善,因此我建议您不要超越:

{{1}}