将double转换为time_t
Convert double to time_t
我有一个包含秒的double
。我想把它转换成time_t
。
我找不到实现这一点的标准函数。我必须手工填写time_t
吗?
未指定std::time_t
的类型。
虽然没有定义,但这几乎总是一个积分值自1月1日00:00以来的秒数(不包括闰秒)1970 UTC,对应POSIX时间。
所以,只要在他们之间安全地选角就可以了。还要注意可移植性(因为标准中没有指定它的类型),并考虑在从二重转换为积分时无法拟合的值。
Chrono Library
正如deepmax的回答中所指出的,time_t
的类型是实现定义的。因此,演员阵容并不一定会成功。值得庆幸的是,chrono库显著提高了时间运算的能力。
代码示例
为了演示如何做到这一点,我在ideone上放了一个活生生的例子。
解释
作为由chrono库提供的改进的能力的示例,可以使用包含秒的双精度来直接构建CCD_ 6
从那里,to_time_t
可以在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以来的秒数。因此,将"速度方程"的结果存储在time_t
中可能会让传统主义者感到困惑。
如果您不转换为time_t
,而只是停止转换为chrono::duration<double>
,那么代码的可读性就会得到提高,因此我建议您只需:
chrono::duration<double>(input)
- C++在数学计算中将double转换为int
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 在c++中为double类型的数组创建一个unique_ptr
- vector<vector<double>> to mxArray using memcpy
- (double) 和 double() 之间的区别
- C++标准是否允许<double>在没有开销的情况下实现 std::可选
- C++ Version Of Double.longBitsToDouble
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- 为什么 nlohmann/json 序列化 "null" 而不是在 double 上"0"?
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 使用 std::vector<double> 访问由 std::unique_ptr<double[2] 管理的数据>
- 将 std::vector<double> 从 C++ 包装到 C 以在 Swift 中使用
- 错误:无法将"<lambda(double)>"转换为"double(*)(double)"
- 如何正确将"strings"转换为"double"?
- 如何在<double>矢量中创建复杂类型的模板<T>?
- "double* grade"、"double *grade"和"double* fn()"有什么区别?
- 在不损失精度的情况下将double从C++传输到python
- 解析某些行的文本和输出"time of appearance"
- 重复使用预分配的向量<复杂<double>>作为<double>长度两倍的向量