未来または過去の日付の計算

C++:
未来または過去の日付の計算

How to: (方法)

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

int main() {
    using namespace std::chrono;

    // 現在の日時を取得
    system_clock::time_point today = system_clock::now();
    time_t tt = system_clock::to_time_t(today);
    
    // 5日後の日付を計算
    system_clock::time_point future_date = today + days{5};
    tt = system_clock::to_time_t(future_date);
    
    // 5日前の日付を計算
    system_clock::time_point past_date = today - days{5};
    time_t pt = system_clock::to_time_t(past_date);
    
    // 出力
    std::cout << "今日の日付: " << std::put_time(std::localtime(&tt), "%Y-%m-%d") << std::endl;
    std::cout << "5日後の日付: " << std::put_time(std::localtime(&tt), "%Y-%m-%d") << std::endl;
    std::cout << "5日前の日付: " << std::put_time(std::localtime(&pt), "%Y-%m-%d") << std::endl;
    
    return 0;
}

Sample Output:

今日の日付: 2023-04-30
5日後の日付: 2023-05-05
5日前の日付: 2023-04-25

Deep Dive (深掘り)

過去、日付の計算は自作関数やライブラリ依存だった。C++11以降、<chrono>ライブラリが導入され、時間の概念は大きく変わった。上記の例ではstd::chronoを使用し、タイムスタンプ加減算を行うdays型を利用します。標準ライブラリはプラットフォーム間での一貫性を保証するが、時にはタイムゾーン計算や閏秒のような複雑なケースを扱うために外部ライブラリ(Boost.Date_Timeなど)の使用が推奨される場合もあります。

See Also (参照)