値を持ったDateTime構造体同士で差を求めることができます。結果はTimeSpan構造体となります。
たとえば、2006年12月10日をDateTime構造体に格納する方法はいくつかあります。
コンストラクタを利用して
dt = new DateTime(2006,12,10);とするのが手っ取り早いかも知れません。あるいは、staticなParseメソッドを使って
dt = DateTime.Parse("2006/12/10");と、する方法もあります。どちらも時刻を指定しなければ、0時0分0秒に設定されます。
DateTime構造体のコンストラクタには、多数のオーバーロードバージョンが存在します。 この章では、次の2つを知っていれば充分でしょう。
public DateTime ( int year, int month, int day ) public DateTime ( int year, int month, int day, int hour, int minute, int second )DateTime構造体のParseメソッドもオーバーロードバージョンがいくつかあります。
public static DateTime Parse ( string s )sには、日付と時刻を格納した文字列を指定します。時刻のみを指定したときは本日の日付になります。
では、簡単なサンプルを見てみましょう。
// setdate01.cs using System; class setdate01 { public static void Main() { DateTime dt = new DateTime(1955,5,31); Console.WriteLine(dt.ToString("F")); dt = new DateTime(1955, 5, 31, 13, 15, 0); Console.WriteLine(dt.ToString("F")); dt = DateTime.Parse("12:15"); Console.WriteLine(dt.ToString("F")); dt = DateTime.Parse("2006/12/31 23:59:59"); Console.WriteLine(dt.ToString("F")); dt = DateTime.Parse("昭和30年5月31日"); Console.WriteLine(dt.ToString("F")); } }実行結果は次のようになります。
日付の文字列に元号が含まれていてもよいことがわかります。
次にDateTime構造体どうしの差を求めてみましょう。この場合結果はTimeSpan構造体に格納されます。
// calcdate01.cs using System; class calcdate01 { public static void Main() { DateTime dt1 = new DateTime(1955, 5, 31); DateTime dt2 = DateTime.Now; TimeSpan ts = dt2 - dt1; Console.WriteLine("経過日数={0}日", ts.Days); } }実行結果は次のようになります。
すでに、上のサンプルプログラムで出てきていますが、TimeSpan構造体の
主なプロパティには、次のようなものがあります。
public int Days { get; } public int Hours { get; } public int Minutes { get; } public int Seconds { get; } public int Milliseconds { get; }それぞれ、TimeSpan構造体が表す日数、時間、分、秒、ミリ秒を端数なしで取得します。
public double TotalDays { get; } public double TotalHours { get; } public double TotalMinutes { get; } public double TotalSeconds { get; } public double TotalMilliseconds { get; }それぞれ、TimeSpan構造体が表す日数、時間、分、秒、ミリ秒の合計を端数を含めて取得します。
public long Ticks { get; }このインスタンス内のタイマ刻みの数を取得します。タイマ刻みとは、100ナノ秒です。
TimeSpan構造体のコンストラクタには4つのオーバーロードバージョンがあります。
public TimeSpan ( long ticks ) public TimeSpan ( int hours, int minutes, int seconds ) public TimeSpan ( int days, int hours, int minutes, int seconds ) public TimeSpan ( int days, int hours, int minutes, int seconds, int milliseconds )ticksにはタイマ刻み、hoursには時間、minutesには分数、secondsには秒、 millisecondsにはミリ秒を指定します。
DateTime構造体にTimeSpan構造体の加算をすることにより、何日後とか何時間後の日時 を取得することができます。
// calcdate02.cs using System; class calcdate02 { public static void Main() { DateTime dt = DateTime.Now; TimeSpan ts; for (int i = 0; i < 20; i++) { ts = new TimeSpan(i, 0, 0, 0); DateTime dtx = dt + ts; Console.WriteLine("今日から{0, 2}日後は{1}です", i, dtx.ToString("D")); } } }実行結果は次のようになります。
Update 30/Sep/2006 By Y.Kumei