http://studyhallweb.com/
プログラム学習室
[Home][C++言語]日付計算

日付計算の例
日付の計算にはtime_tとtm構造体を使用する。

ポイント
・tm構造体は、1900年が0、1月が0になっている
・mktime()を実行すると、tm構造体から整形されたtime_tを取得できる
 整形されたとは、例えばtm構造体の日付が32日の場合、月数を1追加し、日付を1日にするなど、
 カレンダー通りの日付にすることを意味する。
// 日付計算の例

#include <time.h>
#include <iostream>
#include <stdlib.h>  // atoi()で必要

using namespace std;

int main(int argc, char *argv[]) {

    // 加算する日数の処理
    //     コマンドライン引数があったらそれを加算する日数し、
    //     なければ30日後を求める
    int iAddDay = 30;
    if (argc > 1) {
        iAddDay = atoi(argv[1]);
    }

    // 日付計算用の構造体定義
    time_t tNow, tCal;
    struct tm *tDay;

    // 現在の日付取得
    tNow = time(NULL);
    tDay = localtime(&tNow);
    cout << "Year=" << tDay->tm_year + 1900 << endl;
    cout << "Mon =" << tDay->tm_mon  + 1 << endl;       // 0から始まるため1加算
    cout << "Day =" << tDay->tm_mday << endl;

    // 日数の加算
    cout << endl << "Add =" << iAddDay << endl << endl;
    tDay->tm_mday += iAddDay;

    // 加算後の日数の取得
    tCal = mktime(tDay);        // tmから整形されたtime_tを求める
    tDay = localtime(&tCal);    // 再び表示用に年月日に分ける
    cout << "Year=" << tDay->tm_year + 1900 << endl;
    cout << "Mon =" << tDay->tm_mon  + 1 << endl;
    cout << "Day =" << tDay->tm_mday << endl;

    return 0;
}

tm構造体(BCC time.hより)
struct tm
{
  int   tm_sec;
  int   tm_min;
  int   tm_hour;
  int   tm_mday;
  int   tm_mon;
  int   tm_year;
  int   tm_wday;
  int   tm_yday;
  int   tm_isdst;
};

[Home][C++言語]日付計算