在C++中将日期时间字符串转换为(浮点)时间戳



将以下代码视为将字符串日期时间"23/08/1999 23:23:23"转换为浮点型变量的尝试

std::string datetime = "23/08/1999 23:23:23";
const char* format = "%d/%m/%Y %H:%M:%S";
std::string s{ datetime };
std::tm t{};
std::istringstream ss(s);
ss >> std::get_time(&t, format);
std::time_t timestamp = mktime(&t);

当从time_t转换为long int时,static_cast方法似乎有效:

long int tm = static_cast<long int> (timestamp);

而将float作为static_cast类型的方法则面临数据丢失。是否有任何可能的方法将time_t强制转换为float,或将std::string datetime直接转换为float类型的变量?

如果您需要一个不丢失数据的浮点表示,您可以使用double而不是float。虽然不是所有的长int都可以存储在double中而不损失精度,但对于自epoch以来的秒数(可能是微秒(,double应该足够了。但是,您应该检查正在处理的值的边界,并且您有足够的精度来满足您的需要。查看有关浮点数的行为和限制的教程,了解更多信息。

根据您的需求细节,另一种可能有用的选择是选择过去的最近日期,计算输入日期和该时间点之间的差异,并将其存储起来,这样结果就可以轻松地包含在浮动中。

最后,如果你真的需要在不损失精度的情况下处理这个问题,你可以使用任意精度的数学库,比如https://gmplib.org/(注意,我自己没有试过这个图书馆,但它不会是唯一可用的(。

最新更新