DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

時間を表すTimeSpanオブジェクトを作成する、情報を取得する

ここでは、時間を表す型であるSystem.TimeSpan構造体について基本的な事柄を説明します。具体的には、TimeSpanオブジェクトを作成する方法と、TimeSpanのプロパティによってどのような情報を取得できるかについて説明します。

TimeSpanオブジェクトを作成する

TimeSpanオブジェクトを作成するには、以下のような方法があります。

  1. TimeSpan構造体のコンストラクタを呼び出す。
  2. TimeSpan構造体の名前が「From」で始まるメソッドを呼び出す。
  3. TimeSpan.Parseなどを使って、日時を表現した文字列をTimeSpanに変換する。
  4. 日時、時間の計算をする」で紹介しているような計算結果としてTimeSpanオブジェクトを得る。

ここでは、コンストラクタを呼び出す方法と、「From」で始まるメソッドを呼び出す方法を説明します。また、文字列をTimeSpanに変換する方法も簡単に説明します。

コンストラクタを呼び出す

TimeSpanのコンストラクタを呼び出すことで、日にち、時間、分、秒をそれぞれ数値で指定して、TimeSpanオブジェクトを作成できます。

以下に例を幾つか示します。

VB.NET
コードを隠すコードを選択
'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)
C#
コードを隠すコードを選択
//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);

上の例のように正の数値だけでなく、負の数値を指定することもできます。

VB.NET
コードを隠すコードを選択
'次のようにすると、「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)
C#
コードを隠すコードを選択
//次のようにすると、「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を作成する」をご覧ください。

VB.NET
コードを隠すコードを選択
'1時間30分のTimeSpanオブジェクトを作成する
Dim ts1 As New TimeSpan(1, 30, 0)

'タイマ刻み数を覚えておく
Dim ticks As Long = ts1.Ticks

'タイマ刻み数からTimeSpanオブジェクトを復元する
Dim ts2 As New TimeSpan(ticks)
C#
コードを隠すコードを選択
//1時間30分のTimeSpanオブジェクトを作成する
TimeSpan ts1 = new TimeSpan(1, 30, 0);

//タイマ刻み数を覚えておく
long ticks = ts1.Ticks;

//タイマ刻み数からTimeSpanオブジェクトを復元する
TimeSpan ts2 = new TimeSpan(ticks);

From...メソッドを呼び出す

「1時間」や「30秒間」のように単純な時間であれば、名前が「From」で始まるTimeSpan構造体のメソッドを使うと便利です。このようなメソッドには、以下のようなものがあります。

メソッド名 説明
FromDays 指定した日数を表すTimeSpanオブジェクトを返す。小数を指定できる。
FromHours 指定した時間数を表すTimeSpanオブジェクトを返す。小数を指定できる。
FromMinutes 指定した分数を表すTimeSpanオブジェクトを返す。小数を指定できる。
FromSeconds 指定した秒数を表すTimeSpanオブジェクトを返す。小数を指定できる。
FromMilliseconds 指定したミリ秒数を表すTimeSpanオブジェクトを返す。小数を指定できる。
FromTicks 指定したタイマ刻み数を表すTimeSpanオブジェクトを返す。

表に「小数を指定できる」とあるのは、パラメータの型がDoubleで、小数を指定できるということです。例えば日数に「0.5」を指定すると、「12時間」を意味します。

以下にこれらのメソッドを使った例を示します。

VB.NET
コードを隠すコードを選択
'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)
C#
コードを隠すコードを選択
//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メソッドを使用した例を幾つか挙げます。

VB.NET
コードを隠すコードを選択
'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")
C#
コードを隠すコードを選択
//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オブジェクトが表している時間に関する情報は、そのプロパティによって取得できます。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です。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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
  • 履歴:
  • 2013/7/1 「From...メソッドを呼び出す」のサンプルで、FromMinutesとFromSecondsの説明が逆になっていたのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。