我正在进行一些域建模并遇到一个属性,在我看来这个属性最好暴露为Date而不是DateTime,没有时间组件。
框架中没有这种类型有充分的理由吗?将日期类型添加到SQL Server被认为是一个很好的想法。另外,如果有人知道Date类的方便实现,请告诉我!
2018编辑:我现在使用值对象类型解决此问题:
public class Date : ValueOf<DateTime, Date> //Install-Package ValueOf
{
protected override void Validate()
{
if (Value.Date != Value) throw new ArgumentException();
}
}
...
var date = Date.From(someDateTime);
答案 0 :(得分:40)
不,没有一个,是的,应该有。
在我(非常偏见)的观点中,我认为除了the date and time API in .NET isn't very good之外还有一个很好的理由。
我正在开发一个名为Noda Time的新API,当然 在(LocalDate
)中只有一个日期类,但它尚未准备好进行生产。当然,它可能已经完成了你需要的所有工作,如果几乎那么你可以随时要求尽快实现你需要的功能......
答案 1 :(得分:7)
当你需要一个简单的约会而不用担心时间部分,时区,本地和utc等时,我创建了一个简单的Date struct。
答案 2 :(得分:6)
在数据库中,存储容量更重要,因此使用比date
更少空间的datetime
类型可能有意义。在应用程序中,您很少需要保存这几个字节。
您可以更轻松地创建一个Date
类型转换为DateTime
和从public struct Date {
private int _days;
private Date(int days) { _days = days; }
public implicit operator DateTime(Date date) {
return DateTime.MinValue.AddDays(date._days);
}
public implicit operator Date(DateTime dateTime) {
return new Date((int)(dateTime - DateTime.MinValue).TotalDays);
}
}
转换,但仅在内部存储日期。类似的东西:
{{1}}
答案 3 :(得分:0)
使用ToShortDateString()方法。如果您需要网格或属性的属性,请创建一个readonly属性,它只返回yourDate.ToShortDateString(),你得到它!
答案 4 :(得分:-1)
VB.NET有这种类型,Date
数据类型。我认为这是对包含此类型的VB6应用程序代码的一个要求,而不是我们在.NET中使用的DateTime
类型。
日期数据类型(Visual Basic):
http://msdn.microsoft.com/en-us/library/3eaydw6e(v=vs.110).aspx
答案 5 :(得分:-1)
是的,有一个。 Date
,DateTime
(VB)和DateTime
(C#)都有一个名为Date
的函数,只返回日期/时间的日期部分。
还有Time
功能,因此您可以将它们用于两者并分别返回日期/时间部分。
答案 6 :(得分:-4)
实际上并不需要一个 - 只需使用时间组件设置为零的日期(即前一天的午夜),或者只是完全忽略时间组件。
例如,您可以使用DateTime.Today
来获取今天的日期(而不是DateTime.Now
)