二つのDateTime・DateTimeOffsetが等しいかどうか(同一の日時を表すかどうか)を調べるにはEqualsメソッドを使うことが出来ます。 このメソッドは、インスタンスメソッド・静的メソッドの二種類が用意されています。 C#・VB.NETなどオーバーロードされた演算子を使用できる言語では、Equalsメソッドの代わりに等価演算子==
・不等価演算子!=
,<>
を使って等価性の比較を行うことも出来ます。
Equalsメソッド(および等価・不等価演算子)でDateTime同士の比較を行う場合、DateTime同士の減算の場合と同様に時刻の種類(Kindプロパティの値)は考慮されないため、常に同一タイムゾーンの時刻として比較される点に注意が必要です。 二つのDateTime同士の比較においては、両者のTicksプロパティの値が同じであればDateTimeは等しいものとして扱われます。 そのため、DateTimeに設定されている時刻の種類も考慮して比較するには、ToUniversalTime・ToLocalTimeメソッドで日時の種類をローカル時刻かUTCのどちらかに合わせた上で比較を行う必要があります。
using System;
class Sample {
static void Main()
{
// 二つのDateTimeを比較する
var a = new DateTime(2013, 4, 5, 15, 0, 0);
var b = new DateTime(2013, 4, 3, 8, 30, 0);
Console.WriteLine("a = {0}", a);
Console.WriteLine("b = {0}", b);
Console.WriteLine("a == b : {0}", a == b);
Console.WriteLine("a != b : {0}", a != b);
Console.WriteLine("a.Equals(b) : {0}", a.Equals(b));
Console.WriteLine("DateTime.Equals(a, b) : {0}", DateTime.Equals(a, b));
Console.WriteLine();
// 一方はローカル時刻、もう一方はUTCの異なる時刻同士を比較する
var c = new DateTime(2013, 4, 5, 15, 0, 0, DateTimeKind.Local); // ローカル時刻
var d = new DateTime(2013, 4, 5, 15, 0, 0, DateTimeKind.Utc); // UTC
Console.WriteLine("c = {0}", c);
Console.WriteLine("d = {0}", d);
Console.WriteLine("c == d : {0}", c == d);
Console.WriteLine();
// 両者をUTCに統一して時刻同士を比較する
var uc = c.ToUniversalTime();
var ud = d.ToUniversalTime();
Console.WriteLine("uc = {0}", uc);
Console.WriteLine("ud = {0}", ud);
Console.WriteLine("uc == ud : {0}", uc == ud);
Console.WriteLine();
}
}
a = 2013/04/05 15:00:00 b = 2013/04/03 8:30:00 a == b : False a != b : True a.Equals(b) : False DateTime.Equals(a, b) : False c = 2013/04/05 15:00:00 d = 2013/04/05 15:00:00 c == d : True uc = 2013/04/05 6:00:00 ud = 2013/04/05 15:00:00 uc == ud : False
一方DateTimeOffset同士の場合は、Equalsメソッドでの比較の際にオフセット値も考慮されるため、事前にローカル時刻またはUTCに変換する必要はありません。 Equalsメソッドでは内部的に一旦双方の値をUTCに変換した上で比較が行われます。 オフセット値も含めて完全に同一の日時かどうかを比較したい場合には、DateTimeOffset.EqualsExactメソッドを使うことが出来ます。
DateTime・DateTimeOffsetはIEquatableインターフェイスを実装しています。 IEquatableインターフェイスとより高度な等価性の比較処理については等価性の定義と比較も合わせてご覧ください。