一、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类将时间戳转换成整型。