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
を計算することで行えます。