#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
bool compareTimeStrings(const std::string& timeStr1, const std::string& timeStr2) {
std::tm time1 = {};
std::tm time2 = {};
std::istringstream ss1(timeStr1);
std::istringstream ss2(timeStr2);
// 根据时间字符串的格式选择合适的格式化字符串
ss1 >> std::get_time(&time1, "%Y-%m-%d %H:%M:%S");
ss2 >> std::get_time(&time2, "%Y-%m-%d %H:%M:%S");
// 比较转换后的时间
if (mktime(&time1) == mktime(&time2)) {
return true; // 时间相等
}
else {
return mktime(&time1) < mktime(&time2); // 返回第一个时间是否小于第二个时间
}
}
int main() {
std::string timeStr1 = "2023-12-24 15:46:00";
std::string timeStr2 = "2023-12-24 10:45:00";
if (compareTimeStrings(timeStr1, timeStr2)) {
std::cout << timeStr1 << " is earlier than " << timeStr2 << std::endl;
}
else {
std::cout << timeStr1 << " is later than " << timeStr2 << std::endl;
}
return 0;
}
#include <iostream>
#include <sstream> // 包含头文件以使用 std::istringstream
#include <string>
bool parseTime(const std::string& timeStr, struct tm& timeParts) {
std::istringstream ss(timeStr);
char delimiter; // 用于跳过分隔符
// 读取年
ss >> timeParts.tm_year;
ss.get(delimiter); // 读取分隔符
// 读取月
ss >> timeParts.tm_mon;
ss.get(delimiter); // 读取分隔符
// 读取日
ss >> timeParts.tm_mday;
ss.get(delimiter); // 读取分隔符
// 读取小时
ss >> timeParts.tm_hour;
ss.get(delimiter); // 读取分隔符
// 读取分钟
ss >> timeParts.tm_min;
ss.get(delimiter); // 读取分隔符
// 读取秒
ss >> timeParts.tm_sec;
// 检查是否成功读取所有部分
return ss.eof() && !ss.fail();
}
int main() {
std::string timeStr = "2024-12-24 15:30:00";
struct tm timeParts = {};
if (parseTime(timeStr, timeParts)) {
std::cout << "Parsed time: "
<< "Year: " << timeParts.tm_year
<< ", Month: " << timeParts.tm_mon
<< ", Day: " << timeParts.tm_mday
<< ", Hour: " << timeParts.tm_hour
<< ", Minute: " << timeParts.tm_min
<< ", Second: " << timeParts.tm_sec << std::endl;
}
else {
std::cout << "Failed to parse time string." << std::endl;
}
return 0;
}