在C++中,可以使用<chrono>
和<iomanip>
头文件中的类和函数将格式化的时间转换为时间戳。以下是一个例子,演示如何将"年-月-日 时:分:秒"格式的时间转换为自1970年1月1日以来的秒数。
#include <iostream>
#include <sstream>
#include <iomanip>
#include <chrono>
#include <ctime>
// 将格式化的时间转换为时间戳
time_t convert_formatted_time_to_timestamp(const std::string& formatted_time) {
std::istringstream ss(formatted_time);
std::tm tm = {};
char separator;
// 解析时间
ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S");
if (ss.fail()) {
// 如果解析失败,则可能是由于格式不正确导致的
return -1; // 返回错误标识
}
// 将tm结构转换为time_t
return mktime(&tm);
}
int main() {
std::string formatted_time = "2023-03-25 15:30:00"; // 示例时间
time_t timestamp = convert_formatted_time_to_timestamp(formatted_time);
if (timestamp != -1) {
std::cout << "时间戳: " << timestamp << std::endl;
} else {
std::cout << "格式错误" << std::endl;
}
return 0;
}
这段代码定义了一个函数convert_formatted_time_to_timestamp
,它接受一个字符串参数,该字符串应该包含按照"年-月-日 时:分:秒"格式给出的时间。函数使用std::get_time
来解析字符串,并将解析的时间存储在std::tm
结构中。然后,它使用mktime
函数将std::tm
结构转换为time_t
时间戳。如果解析失败,函数返回-1
作为错误指示。
在main
函数中,我们提供了一个示例时间,并输出了相应的时间戳。如果时间格式不正确,则会输出错误信息。