我有double
秒。我想将其转换为time_t
。
我无法找到完成此任务的标准功能。我必须手动填写time_t
吗?
答案 0 :(得分:6)
std::time_t
的类型未指定。
虽然没有定义,但这几乎总是一个不可或缺的值 自1月1日00:00以来的秒数(不计算闰秒) 1970 UTC,对应于POSIX时间。
所以,他们之间的安全铸造可能会很好。还要注意可移植性(因为它的类型没有在标准中指定),并考虑从从double转换为积分时不能适合的值。
答案 1 :(得分:3)
正如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; &#34;的结果在
time_t
中,传统主义者可能会感到困惑。
如果您转换为time_t
而不是转换为chrono::duration<double>
而不是转换为chrono::duration<double>(input)
,那么您的代码的可读性会得到改善,因此我建议您不要超越:
{{1}}