日付を比較する

C++:
日付を比較する

How to: (やり方)

#include <iostream>
#include <chrono>
#include <ctime>

int main() {
    // 現在のシステムの日時を取得
    auto now = std::chrono::system_clock::now();

    // tm構造体に変換
    std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
    std::tm* now_tm = std::localtime(&now_c);
    
    // 昨日の日付を作成
    std::tm yesterday_tm = *now_tm;

    // 今日の日付を作成
    std::tm today_tm = *std::localtime(&now_c);
    today_tm.tm_hour = 0;
    today_tm.tm_min = 0;
    today_tm.tm_sec = 0;
    
    // tm構造体をtime_tに変換
    std::time_t yesterday = std::mktime(&yesterday_tm);
    std::time_t today = std::mktime(&today_tm);

    // 日付を比較
    if (std::difftime(today, yesterday) > 0) {
        std::cout << "Today is after Yesterday.\n";
    } else {
        std::cout << "Yesterday is not after Today.\n";
    }

    return 0;
}

サンプル出力:

Today is after Yesterday.

Deep Dive (深掘り)

歴史的背景では、C++には長い間<ctime>ライブラリが日時を扱う主流でしたが、C++11から<chrono>ライブラリが導入され、より精確で扱いやすいAPIが提供されています。また、Boost.Date_Timeライブラリのような他の選択肢もありますが、標準ライブラリの機能拡張が進むにつれて、より稀なニーズに対処するためのものとなりつつあります。実装の詳細では、<chrono>は時間のポイントをtime_pointオブジェクトとして表現し、時間の間隔や期間をdurationオブジェクトとして扱います。これにより、日付の比較は異なる時間ポイント間のdurationを計算することで行えます。

See Also (関連情報)