.NET では、DateTime クラスは実際には日付と時刻の両方を表します。内部的には、これは西暦 1001 年 1 月 1 日午前 0 時からの 100 ナノ秒の「ティック」数で表される数値として格納されます。この数値は、(出力またはデバッガーで) 表示されるときに「変換」されます。この変換は、フォーマット文字列を介して行われます。
DateTime の時間部分を切り捨てても、時間はまだあります...それはちょうど 00:00:00 です。その時間を表示したくない場合は、フォーマット文字列を調整して変換しないようにする必要があります。
したがって、次のように DateTime.Now.Date
すると、デフォルトの日付変換文字列 (またはカルチャのデフォルト形式) を使用すると、「10/15/2012 00:00:00」と表示されます。
日付部分のみを表示したい場合は、myDate.ToShortDateString()
またはのような操作を行う必要がありますmyDate.ToString("d")
。
EntityFunctions は、Linq to Entities クエリで使用するように設計された一連のツールです。これは、DateTime 書式設定を実行することは通常、クエリでは許可されていないためです。
たとえば、次のコードは機能しません。
var q = from x in dc where x.BirthDate == DateTime.Now.AddYears(-15).Date select x;
次のようにする必要があります。
var q = from x in dc
where x.Birthdate == EntityFunctions.TruncateTime(DateTime.Now.AddYears(-15))
select x;
これにより、SQL コードで日付比較を行うための正しい SQL が生成されます。これは、選択部分で日付を切り捨てるためではなく、EntityFunctions が設計されているものです (ただし、機能します)。ただし、日付は切り捨てられますが、時刻コンポーネントは残り、00:00:00 になるだけです。意図した方法でユーザーに表示するには、日付形式文字列を使用する必要があります。