.NETでは、日時を表すDateTime・DateTimeOffsetと合わせて、時間間隔を表すTimeSpan構造体が用意されています。 TimeSpanは、例えば「36時間」や「50ミリ秒」といった時間の長さを一つの型で表すために使います。
時間の長さをint
・double
などの数値型で表そうとした場合、それが秒を表すのか、分を表すのか、といった単位の扱いや変換が煩雑になりがちですが、TimeSpanを使えばそういった煩雑さは解消されます。 TimeSpanでは加減算もサポートされているので、互いに単位の異なる時間間隔の加減算も容易に行うことができます。
TimeSpan構造体
using System;
class Sample {
static void Main()
{
// 3日と1時間30分0秒
var a = new TimeSpan(3, 1, 30, 00);
// aを分単位で表すと何分になるか
Console.WriteLine("{0} = {1}分", a, a.TotalMinutes);
// 210分
var b = TimeSpan.FromMinutes(210.0);
// bは何時間何分か
Console.WriteLine("{0} = {1}時間{2}分", b, b.Hours, b.Minutes);
// -1500ミリ秒
var c = TimeSpan.FromMilliseconds(-1500);
// cを時間単位で表すと何時間になるか
Console.WriteLine("{0} = {1}時間", c, c.TotalHours);
// bとcの合計時間
var d = b + c;
Console.WriteLine(d);
}
}
実行結果
3.01:30:00 = 4410分 03:30:00 = 3時間30分 -00:00:01.5000000 = -0.000416666666666667時間 03:29:58.5000000
DateTime・DateTimeOffsetがある特定の時点を表すものであるのに対して、TimeSpanは二つの時刻間の差を表すものとも言えます。 実際、DateTime・DateTimeOffsetで日時の加減算を行う場合、TimeSpanを使うことが出来るようになっています。