Dateプロパティとは異なり、DateTime.TimeOfDayプロパティおよびDateTimeOffset.TimeOfDayプロパティが返す値は、どちらも時刻の種類(Kindプロパティ)・オフセット値(Offsetプロパティ)の影響を受けず、時刻部分の値がそのままの値で返されます。 なお、TimeOfDayプロパティはTimeSpan型で時刻を返すため、メソッドを使って比較する場合はDateTime.CompareではなくTimeSpan.Compareを使います(TimeSpan.Compareのかわりに比較演算子を使って比較することもできます)。
TimeOfDayプロパティを使って2つのDateTimeOffsetの時刻のみを比較する
using System;
class Sample {
static void Main()
{
// 各DateTimeOffsetの時刻のみを比較する
var a = new DateTimeOffset(2013, 4, 5, 6, 0, 0, new TimeSpan(9, 0, 0));
var b = new DateTimeOffset(2013, 4, 4, 21, 0, 0, TimeSpan.Zero);
var c = new DateTimeOffset(2013, 4, 4, 16, 0, 0, new TimeSpan(-5, 0, 0));
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.WriteLine("c = {0}", c);
Console.WriteLine("a.TimeOfDay = {0}", a.TimeOfDay);
Console.WriteLine("b.TimeOfDay = {0}", b.TimeOfDay);
Console.WriteLine("c.TimeOfDay = {0}", c.TimeOfDay);
Console.WriteLine("a.TimeOfDay < b.TimeOfDay : {0}", a.TimeOfDay < b.TimeOfDay);
Console.WriteLine("b.TimeOfDay < c.TimeOfDay : {0}", b.TimeOfDay < c.TimeOfDay);
Console.WriteLine("c.TimeOfDay < a.TimeOfDay : {0}", c.TimeOfDay < a.TimeOfDay);
Console.WriteLine("TimeSpan.Compare(a.TimeOfDay, b.TimeOfDay) : {0}", TimeSpan.Compare(a.TimeOfDay, b.TimeOfDay));
Console.WriteLine("TimeSpan.Compare(b.TimeOfDay, c.TimeOfDay) : {0}", TimeSpan.Compare(b.TimeOfDay, c.TimeOfDay));
Console.WriteLine("TimeSpan.Compare(c.TimeOfDay, a.TimeOfDay) : {0}", TimeSpan.Compare(c.TimeOfDay, a.TimeOfDay));
}
}
実行結果
a = 2013/04/05 6:00:00 +09:00 b = 2013/04/04 21:00:00 +00:00 c = 2013/04/04 16:00:00 -05:00 a.TimeOfDay = 06:00:00 b.TimeOfDay = 21:00:00 c.TimeOfDay = 16:00:00 a.TimeOfDay < b.TimeOfDay : True b.TimeOfDay < c.TimeOfDay : False c.TimeOfDay < a.TimeOfDay : False TimeSpan.Compare(a.TimeOfDay, b.TimeOfDay) : -1 TimeSpan.Compare(b.TimeOfDay, c.TimeOfDay) : 1 TimeSpan.Compare(c.TimeOfDay, a.TimeOfDay) : 1