一、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
微信掃一掃
支付寶掃一掃