ここでは、時間を表す型であるSystem.TimeSpan構造体について基本的な事柄を説明します。具体的には、TimeSpanオブジェクトを作成する方法と、TimeSpanのプロパティによってどのような情報を取得できるかについて説明します。
TimeSpanオブジェクトを作成するには、以下のような方法があります。
ここでは、コンストラクタを呼び出す方法と、「From」で始まるメソッドを呼び出す方法を説明します。また、文字列をTimeSpanに変換する方法も簡単に説明します。
TimeSpanのコンストラクタを呼び出すことで、日にち、時間、分、秒をそれぞれ数値で指定して、TimeSpanオブジェクトを作成できます。
以下に例を幾つか示します。
'1時間30分のTimeSpanオブジェクトを作成する Dim ts1 As New TimeSpan(1, 30, 0) '1日と10時間30分50秒のTimeSpanオブジェクトを作成する Dim ts2 As New TimeSpan(1, 10, 30, 50) '1日と10時間30分50秒500ミリ秒のTimeSpanオブジェクトを作成する Dim ts3 As New TimeSpan(1, 10, 30, 50, 500)
//1時間30分のTimeSpanオブジェクトを作成する TimeSpan ts1 = new TimeSpan(1, 30, 0); //1日と10時間30分50秒のTimeSpanオブジェクトを作成する TimeSpan ts2 = new TimeSpan(1, 10, 30, 50); //1日と10時間30分50秒500ミリ秒のTimeSpanオブジェクトを作成する TimeSpan ts3 = new TimeSpan(1, 10, 30, 50, 500);
上の例のように正の数値だけでなく、負の数値を指定することもできます。
'次のようにすると、「1時間 - 30分」で「00:30:00」となる Dim ts1 As New TimeSpan(1, -30, 0) '次のようにすると、「-1時間 + 30分」で「-00:30:00」となる Dim ts2 As New TimeSpan(-1, 30, 0) '次のようにすると、「-1時間 - 30分」で「-01:30:00」となる Dim ts3 As New TimeSpan(-1, -30, 0)
//次のようにすると、「1時間 - 30分」で「00:30:00」となる TimeSpan ts1 = new TimeSpan(1, -30, 0); //次のようにすると、「-1時間 + 30分」で「-00:30:00」となる TimeSpan ts2 = new TimeSpan(-1, 30, 0); //次のようにすると、「-1時間 - 30分」で「-01:30:00」となる TimeSpan ts3 = new TimeSpan(-1, -30, 0);
上のように日にち、時間、分、秒を指定する方法以外に、タイマ刻み数(100ナノ秒)を指定してTimeSpanオブジェクトを作成することもできます。実はTimeSpanオブジェクトが保持している情報はタイマ刻み数だけですので(上のように日にち、時間、分、秒を指定してもタイマ刻み数に変換されます)、Ticksプロパティで取得できるタイマ刻み数を覚えておけば、それを使ってTimeSpanオブジェクトを復元できます。なおタイマ刻み数について詳しくは、「タイマ刻み数を指定してDateTimeを作成する」をご覧ください。
'1時間30分のTimeSpanオブジェクトを作成する Dim ts1 As New TimeSpan(1, 30, 0) 'タイマ刻み数を覚えておく Dim ticks As Long = ts1.Ticks 'タイマ刻み数からTimeSpanオブジェクトを復元する Dim ts2 As New TimeSpan(ticks)
//1時間30分のTimeSpanオブジェクトを作成する TimeSpan ts1 = new TimeSpan(1, 30, 0); //タイマ刻み数を覚えておく long ticks = ts1.Ticks; //タイマ刻み数からTimeSpanオブジェクトを復元する TimeSpan ts2 = new TimeSpan(ticks);
「1時間」や「30秒間」のように単純な時間であれば、名前が「From」で始まるTimeSpan構造体のメソッドを使うと便利です。このようなメソッドには、以下のようなものがあります。
メソッド名 | 説明 |
---|---|
FromDays | 指定した日数を表すTimeSpanオブジェクトを返す。小数を指定できる。 |
FromHours | 指定した時間数を表すTimeSpanオブジェクトを返す。小数を指定できる。 |
FromMinutes | 指定した分数を表すTimeSpanオブジェクトを返す。小数を指定できる。 |
FromSeconds | 指定した秒数を表すTimeSpanオブジェクトを返す。小数を指定できる。 |
FromMilliseconds | 指定したミリ秒数を表すTimeSpanオブジェクトを返す。小数を指定できる。 |
FromTicks | 指定したタイマ刻み数を表すTimeSpanオブジェクトを返す。 |
表に「小数を指定できる」とあるのは、パラメータの型がDoubleで、小数を指定できるということです。例えば日数に「0.5」を指定すると、「12時間」を意味します。
以下にこれらのメソッドを使った例を示します。
'1日のTimeSpanオブジェクトを作成する Dim ts4 As TimeSpan = TimeSpan.FromDays(1) '1.5時間(1時間30分)のTimeSpanオブジェクトを作成する Dim ts5 As TimeSpan = TimeSpan.FromHours(1.5) '90分(1時間30分)のTimeSpanオブジェクトを作成する Dim ts6 As TimeSpan = TimeSpan.FromMinutes(90) '-10秒のTimeSpanオブジェクトを作成する Dim ts7 As TimeSpan = TimeSpan.FromSeconds(-10) '500ミリ秒のTimeSpanオブジェクトを作成する Dim ts8 As TimeSpan = TimeSpan.FromMilliseconds(500) '10000タイマ刻み数(1ミリ秒)のTimeSpanオブジェクトを作成する Dim ts9 As TimeSpan = TimeSpan.FromTicks(10000)
//1日のTimeSpanオブジェクトを作成する TimeSpan ts4 = TimeSpan.FromDays(1); //1.5時間(1時間30分)のTimeSpanオブジェクトを作成する TimeSpan ts5 = TimeSpan.FromHours(1.5); //90分(1時間30分)のTimeSpanオブジェクトを作成する TimeSpan ts6 = TimeSpan.FromMinutes(90); //-10秒のTimeSpanオブジェクトを作成する TimeSpan ts7 = TimeSpan.FromSeconds(-10); //500ミリ秒のTimeSpanオブジェクトを作成する TimeSpan ts8 = TimeSpan.FromMilliseconds(500); //10000タイマ刻み数(1ミリ秒)のTimeSpanオブジェクトを作成する TimeSpan ts9 = TimeSpan.FromTicks(10000);
「01:02:03」のように時間を表した文字列をTimeSpanオブジェクトに変換するには、TimeSpan.Parseなどのメソッドを使用します。「日時を表す文字列をDateTimeオブジェクトに変換する」で紹介しているDateTimeオブジェクトでの方法とほぼ同じです。
以下に、TimeSpan.Parseメソッドを使用した例を幾つか挙げます。
'1日と2時間3分4秒(1.02:03:04)を表すTimeSpanオブジェクトを作成する Dim ts1 As TimeSpan = TimeSpan.Parse("1.2:3:4") '1時間2分3秒(01:02:03)を表すTimeSpanオブジェクトを作成する Dim ts2 As TimeSpan = TimeSpan.Parse("1:2:3") '1時間2分(01:02:00)を表すTimeSpanオブジェクトを作成する Dim ts3 As TimeSpan = TimeSpan.Parse("1:2") '1日(1.00:00:00)を表すTimeSpanオブジェクトを作成する Dim ts4 As TimeSpan = TimeSpan.Parse("1")
//1日と2時間3分4秒(1.02:03:04)を表すTimeSpanオブジェクトを作成する TimeSpan ts1 = TimeSpan.Parse("1.2:3:4"); //1時間2分3秒(01:02:03)を表すTimeSpanオブジェクトを作成する TimeSpan ts2 = TimeSpan.Parse("1:2:3"); //1時間2分(01:02:00)を表すTimeSpanオブジェクトを作成する TimeSpan ts3 = TimeSpan.Parse("1:2"); //1日(1.00:00:00)を表すTimeSpanオブジェクトを作成する TimeSpan ts4 = TimeSpan.Parse("1");
TimeSpanオブジェクトが表している時間に関する情報は、そのプロパティによって取得できます。TimeSpan構造体のプロパティには、以下のようなものがあります。
プロパティ名 | 説明 | プロパティ値の型 | プロパティ値の範囲 |
---|---|---|---|
Days | 日の部分を取得する。 | Int32 | |
Hours | 時間の部分を取得する。 | Int32 | -23~23 |
Minutes | 分の部分を取得する。 | Int32 | -59~59 |
Seconds | 秒の部分を取得する。 | Int32 | -59~59 |
Milliseconds | ミリ秒の部分を取得する。 | Int32 | -999~999 |
TotalDays | 日数単位で取得する。 | Double | |
TotalHours | 時間単位で取得する。 | Double | |
TotalMinutes | 分単位で取得する。 | Double | |
TotalSeconds | 秒単位で取得する。 | Double | |
TotalMilliseconds | ミリ秒単位で取得する。 | Double | |
Ticks | タイマ刻みの数を取得する。 | Int64 |
分かりにくいのは、プロパティ名に「Total」が付くものと付かないものの違いでしょう。
「Total」が付かないものは、TimeSpanオブジェクトが表している時間の内、その部分の値が幾つかを示しています。例えば「1時間30分」の場合、Hoursは1で、Minutesは30です。DaysやSecondsは0です。
一方「Total」が付いているものは、TimeSpanオブジェクトが表している時間全体をその単位に変換した時にどのような数値になるかを示しています。例えば「1時間30分」の場合、TotalHoursは1.5で、TotalMinutesは90です。TotalDaysは0.0625で、TotalSecondsは5400です。
'1時間30分のTimeSpanオブジェクトを作成する Dim ts1 As New TimeSpan(1, 30, 0) '日の部分 Console.WriteLine(ts1.Days) '0 '時間の部分 Console.WriteLine(ts1.Hours) '1 '分の部分 Console.WriteLine(ts1.Minutes) '30 '秒の部分 Console.WriteLine(ts1.Seconds) '0 'ミリ秒の部分 Console.WriteLine(ts1.Milliseconds) '0 '日数単位の総時間 Console.WriteLine(ts1.TotalDays) '0.0625 '時間単位の総時間 Console.WriteLine(ts1.TotalHours) '1.5 '分単位の総時間 Console.WriteLine(ts1.TotalMinutes) '90 '秒単位の総時間 Console.WriteLine(ts1.TotalSeconds) '5400 'ミリ秒単位の総時間 Console.WriteLine(ts1.TotalMilliseconds) '5400000 'タイマ刻み数単位の総時間 Console.WriteLine(ts1.Ticks) '54000000000
//1時間30分のTimeSpanオブジェクトを作成する TimeSpan ts1 = new TimeSpan(1, 30, 0); //日の部分 Console.WriteLine(ts1.Days); //0 //時間の部分 Console.WriteLine(ts1.Hours); //1 //分の部分 Console.WriteLine(ts1.Minutes); //30 //秒の部分 Console.WriteLine(ts1.Seconds); //0 //ミリ秒の部分 Console.WriteLine(ts1.Milliseconds); //0 //日数単位の総時間 Console.WriteLine(ts1.TotalDays); //0.0625 //時間単位の総時間 Console.WriteLine(ts1.TotalHours); //1.5 //分単位の総時間 Console.WriteLine(ts1.TotalMinutes); //90 //秒単位の総時間 Console.WriteLine(ts1.TotalSeconds); //5400 //ミリ秒単位の総時間 Console.WriteLine(ts1.TotalMilliseconds); //5400000 //タイマ刻み数単位の総時間 Console.WriteLine(ts1.Ticks); //54000000000
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。