C++:
比较两个日期

如何做:

#include <iostream>
#include <ctime>

int main() {
    std::tm date1 = {};
    std::tm date2 = {};

    // 设置日期1为2023年4月1日
    date1.tm_year = 123; // 从1900年开始算
    date1.tm_mon = 3;    // 从0开始算(0-11)
    date1.tm_mday = 1;

    // 设置日期2为2023年4月2日
    date2.tm_year = 123;
    date2.tm_mon = 3;
    date2.tm_mday = 2;

    // 将tm结构转换为time_t
    time_t time1 = mktime(&date1);
    time_t time2 = mktime(&date2);

    // 比较日期
    if (time1 < time2) {
        std::cout << "日期1早于日期2。" << std::endl;
    } else if (time1 > time2) {
        std::cout << "日期1晚于日期2。" << std::endl;
    } else {
        std::cout << "两个日期相同。" << std::endl;
    }

    return 0;
}

输出可能是:

日期1早于日期2。

深入探究

早期的C++版本并没有专门的日期时间库,通常使用C语言的 <ctime> 处理日期时间。C++11引入了 <chrono> 库,提供了更好的时间点和持续时间管理。不过,对于日期的比较,最简单的方式仍然是使用C标准库的tm结构和mktime函数。这种方法适合通用场景,但如果需要更高精度或处理诸如时区和夏令时的复杂问题,就需要考虑用<chrono>库或第三方库了。

C++20进一步改善了日期和时间的处理机制,引入了新的标准库模块<chrono>,提供了对日期、时钟和时区的全面支持。

日常使用中,除了时间戳比较,你还可能需要处理实际的日历日期。这时候,使用如boost.date_time等第三方库将提供更多灵活性和功能。

查看更多