MFC/ATLにはCTimeとCTimeSpanという便利なクラスが用意されています。これを使うと時間の管理や計算が柔軟にできるようになります。
時刻というのは、時間軸上のある1点をあらわしますが、CTimeはこの時刻を保持します。CTimeが保持するのは絶対時刻です。
これに対して、CTimeSpanは、ある時刻とある時刻の差分を保持します。すなわち相対時刻です。ある時刻とある時刻が時間軸上のどこにあっても、その差が同じであればCTimeSpanの中身は同じになります。
この2つは自由に足したり引いたりできます。例えば、CTimeオブジェクトにCTimeSpanオブジェクトを足すと、差分を足したCTimeオブジェクトが返ります。また、CTimeオブジェクトからCTimeオブジェクトを引くと、2つのCTimeの差分を保持したCTimeSpanオブジェクトが返ります。
では実際の使い方を見てみましょう。まず、現在時刻を取得するには、CTime::GetCurrentTime()を使います。この関数はstaticなのでどこからでも使えます。CTimeSpanは次のように日、時、分、秒を指定して初期化します。相対値なので、マイナスの値を指定することもできます。
CTime cTime1;
CTime cTime2(2005, 10, 4, 20, 30, 15); // 年月日時分秒指定で初期化
CTimeSpan cTimeSpan1(0, 1, 0, 0); // 日、時、分、秒指定で初期化
CTimeSpan cTimeSpan2;
cTime1 = CTime::GetCurrentTime(); //現在時刻
cTime1 += cTimeSpan1; // 1時間足す
cTimeSpan2 = cTime1 -cTime2; // 差分をとる
次は、年、月、日、時、分、秒、曜日を取得する方法です。それぞれ専用関数が用意されています。曜日は日:1 月:2 火:3 水:4 木:5 金:6 土:7が返ります。
CTime cTime;
int year,month, day, hour, min, sec, dow;
cTime = CTime::GetCurrentTime(); // 現在時刻
year =cTime.GetYear(); // 年
month = cTime.GetMonth(); // 月
day =cTime.GetDay(); // 日
hour =cTime.GetHour(); // 時
min =cTime.GetMinute(); // 分
sec =cTime.GetSecond(); // 秒
dow =cTime.GetDayOfWeek(); // 曜日
時刻を"2006/10/04 20:30:15"のような文字列としてとりたいときは、CTime::Format()関数を使うと簡単にできます。
CTime cTime;
CString str;
cTime = CTime::GetCurrentTime(); // 現在時刻
str = cTime.Format("%Y/%m/%d%H:%M:%S"); // "YYYY/mm/ddHH:MM:SS"形式の時刻文字列を取得