【发布时间】:2011-07-15 22:03:04
【问题描述】:
在我们的 C# 项目中,我们需要表示没有时间的日期。我知道 DateTime 的存在,但是,它也包含一天中的时间。 我想明确指出某些变量和方法参数是基于日期的。因此我不能使用DateTime.Date 属性
解决这个问题的标准方法是什么?我肯定不是第一个遇到这种情况的人吗?为什么C#中没有Date类?
有没有人有一个很好的实现,使用结构体,也许在 DateTime 上使用一些扩展方法,也许实现一些运算符,例如 == 和 ?
【问题讨论】:
-
虽然我理解想要明确、清晰的语义,但
DateTime会产生哪些具体问题? -
1 我需要记住在方法开始时删除小时数。 2 它不能很好地传达它仅在日期上起作用。这很重要,例如当从 Db 存储和加载时,窄类型就足够了。编程是人而不是计算机的交流
-
我只想说缺少日期类是一件大事,使用 DateTime 根本没有好处。一旦您将“日期”存储为日期时间,您就会成为语言环境/时区日光节约问题的人质。扔掉时间部分可以在时钟改变的一天将所有日期发送回(!)。不同时区的用户在尝试转换日期时间时会看到不同的日期。日期时间可以很好地表示精确的时刻(从某个时间点开始或其他什么),但它们非常不适合表示抽象日期。
-
后来类似的问题stackoverflow.com/questions/7167710/…,Jon Skeet 说应该有一个日期。
-
仅日期数据类型对应于 DateTime,就像整数数据类型对应小数一样。那些认为我们不需要日期的人,因为你可以扔掉时间部分类似于说我们不需要整数,因为我们可以扔掉小数部分。我们的世界有一个不包括时间的日期概念。 3 月 5 日不是 3 月 5 日 00:00:00。