Frameworkのクラス・ライブラリには、時間を表す構造体が2種類ある。1つは特定の日時を表すDateTime構造体(System名前空間)、もう1つは時間間隔を表すTimeSpan構造体(System名前空間)だ。本稿では、これら2つの構造体における加減算について解説する。日時(DateTime構造体)における加減算2つのDateTimeオブジェクトは、両者を加算することはできないが、一方からもう一方を減算し、その時間間隔をTimeSpanオブジェクトとして求めることができる。これにはDateTime構造体のSubtractメソッドを使用するが、C#では、-演算子(マイナス演算子)がオーバーロードされているため、2つのオブジェクト同士の単純な引き算として記述できる(以下のサンプル・コードはすべてVB.NET)。日付同士の加算はできないが、日付に時間間隔を加えて、別の日付を得ることは可能だ。時間間隔(TimeSpan構造体)における加減算TimeSpanオブジェクト同士は、加算および減算の両方が可能である。これにはAddメソッドおよびSubtractメソッドが用意されており、C#では演算子のオーバーロードにより、+演算子と-演算子が利用できる。その演算結果もTimeSpanオブジェクトとなる。絶対値の取得TimeSpanオブジェクトは負の値になり得るが、上記コードの最後の行に示したように、Durationメソッドによりその絶対値(正の値)を得ることができる。DateTime構造体とTimeSpan構造体を利用したサンプル・プログラム最後に、DateTime構造体とTimeSpan構造体を利用した簡単なサンプル・プログラムを示しておく。このプログラムは、2組の開始時刻と終了時刻からその時間間隔を求め、それらの合計時間を表示する。timespan.vbDateTime構造体とTimeSpan構造体を利用したVB.NETのサンプル・プログラム(timespan.vb)timespan.vbのダウンロードTimeSpanオブジェクトの値を時間数として得たい場合にはTotalHoursプロパティが利用できるが、その値は端数(1時間未満の値)を小数として表すdouble型となる。上記プログラムの最後の行では、C#の場合にはTotalHoursプロパティの値をint型にキャストすることにより、VB.NETではInt関数(Microsoft.VisualBasic名前空間)により、小数点以下を切り捨てた時間数を取得し、さらに分の数をMinutesプロパティから取得して、合計時間を表示している。TotalHoursプロパティとは別に、TimeSpan構造体にはHoursプロパティがあるが、このプロパティからはTimeSpanオブジェクトの値の時間部分(0〜23の整数)しか得られないので注意してほしい(例えばTotalHoursプロパティの値が「26」の場合には、Hoursプロパティの値は「2」となる)。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。