一、string轉int
在進行字元串轉時間戳前,需要先將字元串轉換成int類型的秒數。可以使用std::stoi()函數將字元串轉換成int。
#include <string> #include <iostream> #include <chrono> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); std::cout << timestamp << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。
二、string轉為json
如果需要將時間戳加入到json數據中,可以使用C++ JSON庫,如jsoncpp或者rapidjson。
#include <iostream> #include <json/json.h> #include <chrono> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); Json::Value root; root["time"] = (Json::Int64)timestamp; std::cout << root.toStyledString() << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳,最後將時間戳對象加入到json對象中。
三、string轉int的方法
在轉換字元串為int時,可以考慮使用std::stoi()函數或者std::stringstream類。std::stoi()函數將字元串轉換為int類型;std::stringstream類也可以將字元串轉化為任何基本類型。
#include <iostream> #include <chrono> #include <string> #include <sstream> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); int timestamp_int = std::stoi(std::to_string(timestamp)); std::stringstream ss; ss << "timestamp:" << timestamp_int; std::cout << ss.str() << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。將時間戳對象轉換為字元串,再使用std::stoi()函數將其轉換成int類型。
四、string轉double
有時候需要將時間表示成一個小數,可以使用std::stod()函數將時間戳轉換為double類型。
#include <iostream> #include <chrono> #include <string> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); double timestamp_double = std::stod(std::to_string(timestamp)); std::cout << timestamp_double << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。將時間戳對象轉換為字元串,再使用std::stod()函數將其轉換成double類型。
五、string轉為list
將一個時間戳轉換成一個包含年、月、日、時、分、秒的列表,可以使用std::stringstream類,把時間戳分割成多個字元串,再push_back()到list中。
#include <iostream> #include <chrono> #include <string> #include <list> #include <sstream> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); std::stringstream ss(std::to_string(timestamp)); std::string item; std::list<std::string> timestamp_list; while (std::getline(ss, item, ' ')) { timestamp_list.push_back(item); } for (auto x : timestamp_list) { std::cout << x << " " ; } std::cout << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。使用std::stringstream類將時間戳分割成多個字元串,再使用push_back()函數將字元串push到list中,形成一個包含年、月、日、時、分、秒的列表。
六、string轉color
有時候需要將時間表示成顏色碼,可以使用std::to_string()函數將時間戳轉換為顏色碼。實現方法為,使用std::strftime()函數格式化時間戳,然後將格式化後的時間前加「#」,變成一個6位的十六進位字元串。
#include <iostream> #include <chrono> #include <string> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); std::strftime(outString, sizeof(outString), "%Y-%m-%d %H:%M:%S", &tm); std::string color_string = "#" + std::to_string(std::stoul(outString, nullptr, 0) & 0xFFFFFF); std::cout << color_string << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。使用std::strftime()函數格式化時間戳,使用std::stoul()函數將格式化後的字元串轉換成無符號長整型,並且與0xFFFFFF進行位與操作。將所得的值轉換成帶「#」的十六進位字元串,即可得到顏色碼。
七、string轉integer
使用std::istringstream類的>>操作符將字元串轉換成整型。在轉換時需要判斷字元串是否有非數字字元。
#include <iostream> #include <string> #include <sstream> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); std::istringstream iss1(std::to_string(timestamp)); int timestamp_int = 0; iss1 >> timestamp_int; if (!iss1.fail()) { std::cout << timestamp_int << std::endl; } else { std::cout << "轉換失敗" << std::endl; } return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。使用std::istringstream類將時間戳轉換成整型。需要注意的是,在轉換時需要先判斷字元串是否有非數字字元。
八、string轉intc
使用sscanf()函數將字元串轉換成整型。
#include <iostream> #include <string> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); int timestamp_int = 0; std::sscanf(std::to_string(timestamp).c_str(), "%d", ×tamp_int); std::cout << timestamp_int << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。使用sscanf()函數將時間戳轉換成整型。
九、string轉streamc
使用std::stringstream類來將字元串轉換成整型。
#include <iostream> #include <string> #include <sstream> int main() { std::string str = "2022-05-30 12:12:12"; std::tm tm = {}; std::istringstream iss(str); iss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); std::time_t timestamp = mktime(&tm); int timestamp_int = 0; std::stringstream stream(std::to_string(timestamp)); stream >> timestamp_int; std::cout << timestamp_int << std::endl; return 0; }
以上代碼中,將「2022-05-30 12:12:12」字元串轉換成tm結構體對象,再使用mktime()函數將tm對象轉換為時間戳。使用std::stringstream類將時間戳轉換成整型。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195797.html