将双精度转换为 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)
我有一个包含秒数的 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 "time_t
可能会让传统主义者感到困惑。
如果您不转换为 time_t
而只是停止转换为 chrono::duration<double>
,那么您的代码的可读性将会提高,因此我建议您不要再进一步:
chrono::duration<double>(input)