DateTime構造体は、ある瞬間を表しますが、TimeSpan構造体は瞬間から瞬間までの間隔を表現します。
値を持った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