好吧,没有 System.Date 类型,所以不幸的是你必须让它与 System.DateTime 一起工作。然而,这不是一个新问题,并且有已知的解决方案。
也许需要更多信息;你到底用什么来从表中提取记录,你用什么来保存这些记录,以及你是如何在检索背后构建数据库查询的?
如果您不关心日期/时间值的时间元素,您可以做的第一件事是将其截断为数据库查询的一部分。T-SQL 中的公式类似于:
SELECT CONVERT(datetime, CONVERT(varchar(20), GetDate(), 101)) as Today
有些操作可以在不返回字符串的情况下为您提供相同的结果,在 SQL Server 2008 及更好的版本中,您可以转换为 Date 类型,但上述查询相对简洁,适用于任何 SQL Server 版本从 2000 年开始。
其次,如果您不能这样做(例如,您正在使用无法更改的存储过程),则 System.DateTime 上有一个可用的 Date 属性,它返回时间分量为零的值(例如,DateTime.Now.Date == DateTime.Today
) . 如果您使用可以接受 lambda 的排序方法,例如 Linq 的 OrderBy() 或 List.Sort(),您可以投影该值而无需更改它。或者,如果您从不想处理该值,只需通过向下查看表并将列中的每个字段设置为其 Date 属性的值来更改它。如果其他人可能关心时间戳,请不要将这些值保存回数据库。
编辑评论:
System.DateTime 将始终具有时间组件。.NET 中的日期时间基于单个 Int64“Ticks”值。一个“滴答声”~= 100ns。您看到的所有与时间相关的属性,如小时、分钟、秒等,都是基于该刻度值计算的,“日期”组件的年、月和日也是如此。例如,可以通过从 Ticks 值开始计算 Seconds 属性,取模除以每分钟的 Ticks 数(6 亿),然后将结果除以每秒的 Ticks 数(1000 万)。
因此,根本不可能切断“日期”和“时间”的概念,因为它们都存储在相同的数值中。您可以做的最好的事情是指定一个 DateTime,它的 Ticks 数量可以被 864,000,000,000(24 小时内的 Ticks 数量)整除,以便时间属性的计算结果都为零。