[C#] で日付時刻(DateTime型)の差を求めるには

2009-8-18 22:00
このエントリーをはてなブックマークに追加

C# では日付・時刻を DateTime 型で扱います。二つの時刻の差を求めるには、TimeSpan 構造体を使います。TimeSpan 構造体は二つの DateTime 型の変数の差を取ったときに結果として返されます。

  DateTime oldDateTime = new DateTime(2009, 08, 01, 12, 34, 56); //2009年8月1日 12時34分56秒
  TimeSpan ts = DateTime.Now - oldDateTime;   //DateTime の差が TimeSpan として返る
  MessageBox.Show(ts.TotalSeconds + "秒の差があります。");

DateTime 型もクラスではなく構造体です。構造体の差が別の構造体で表わされるというところが最初は戸惑うと思いますが、慣れるととても便利です。これはマイナス演算子がオーバーライドされているためで、オブジェクト同士の引き算でオブジェクトを返すことが可能になっています。

DateTime 構造体には Substract というメソッドがあり、上記のコードは

  TimeSpan ts = DateTime.Now.Substract(oldDateTime);

と等価です。

また、DateTime から時刻の差である TimeSpan を足したり引いたりして、DateTime を返すという使い方もできます。

  TimeSpan ts = new TimeSpan(12, 34, 56); //12時間34分56秒の差を表わす
  DateTime newDateTime1 = DateTime.Now - ts; 
  DateTime newDateTime2 = DateTime.Now + ts; 

この場合も差は Substract メソッドに置き換えできますし、加算は Add メソッドに置き換えできます。

  TimeSpan ts = TimeSpan.FromDays(2); //2日間の差を表わす TimeSpanオブジェクト
  DateTime newDateTime1 = DateTime.Now.Substract(ts);
  DateTime newDateTime2 = DateTime.Now.Add(ts);

また、TimeSpan 構造体同士の加算、減算もサポートされており、TimeSpan構造体が返ります。

  TimeSpan ts1 = TimeSpan.FromHours(3);
  TimeSpan ts2 = TimeSpan.FromMinutes(20);
  TimeSpan ts3 = TimeSpan.FromSeconds(100);
  TimeSpan ts = ts1 + ts2 - ts3;
  MessageBox.Show(ts.ToString()); 

TimeSpan 構造体同士の加減算も、Add メソッドと Substract メソッドで置き換えできます。

  • ブックマーク : アクセス: 160,613回
  • カテゴリー : C#
  • キーワード :

コメントはまだありません

No comments yet.

Sorry, the comment form is closed at this time.

33 queries. HTML convert time: 0.066 sec. Powered by WordPress. Valid XHTML
Copyright © 2003-2017 @ futuremix.org ログイン