时间字符串比较大小

#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;
}

  

posted @ 2024-12-24 15:47  leochan007  阅读(25)  评论(0)    收藏  举报