在 .NET 中,DateTime 类实际上表示日期和时间。在内部,它存储为一个数值,由自公元 1001 年 1 月 1 日午夜以来的 100 纳秒“滴答”数表示。此数字在显示时(在输出中或在调试器中)得到“转换”。此转换是通过格式字符串完成的。
即使您截断了 DateTime 的时间部分,它仍然有时间......它只是 00:00:00,如果您不想看到那个时间,则需要调整格式字符串以不转换它。
因此,如果您执行以下操作: DateTime.Now.Date
如果您使用默认日期转换字符串(或您的文化的默认格式),它将显示“10/15/2012 00:00:00”。
如果您只想显示 Date 部分,那么您必须执行类似myDate.ToShortDateString()
or的操作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,并且您必须使用日期格式字符串以您想要的方式将其呈现给您的用户。