一、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);
char outString[20];
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
类将时间戳转换成整型。