簡體   English   中英

將日期時間字符串轉換為 C++ 中的(浮點)時間戳

[英]Converting datetime string to (float) timestamp in 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類型變量的方法?

如果您需要一個不丟失數據的浮點表示,您可以使用雙精度而不是浮點數。 盡管並非所有 long int 都可以存儲在 double 中而不會損失精度,但對於自紀元以來的秒數(可能還有微秒),double 應該足夠了。 但是你應該檢查你正在處理的值的范圍,並且你有足夠的精度來滿足你的需要。 查看有關浮點數的行為和限制的教程以獲取更多信息。

根據您的要求的詳細信息可能有用的另一種選擇是選擇過去的最近日期並計算輸入日期與該時間點之間的差異並將其存儲,以便結果可以包含在舒適地漂浮。

最后,如果您真的需要在不損失任何精度的情況下處理它,您可以使用任意精度數學庫,例如https://gmplib.org/ (注意我自己沒有嘗試過這個庫,但它不會是唯一的一個可用)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM