没有时间的.NET日期 - 有一个,还是我不需要一个?

时间:2011-08-23 21:21:19

标签: .net datetime date

我正在进行一些域建模并遇到一个属性,在我看来这个属性最好暴露为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);

7 个答案:

答案 0 :(得分:40)

不,没有一个,是的,应该有。

在我(非常偏见)的观点中,我认为除了the date and time API in .NET isn't very good之外还有一个很好的理由。

我正在开发一个名为Noda Time的新API,当然 在(LocalDate)中只有一个日期类,但它尚未准备好进行生产。当然,它可能已经完成了你需要的所有工作,如果几乎那么你可以随时要求尽快实现你需要的功能......

答案 1 :(得分:7)

当你需要一个简单的约会而不用担心时间部分,时区,本地和utc等时,我创建了一个简单的Date struct

https://github.com/claycephas/csharp-date

答案 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)

是的,有一个。 DateDateTime(VB)和DateTime(C#)都有一个名为Date的函数,只返回日期/时间的日期部分。

还有Time功能,因此您可以将它们用于两者并分别返回日期/时间部分。

答案 6 :(得分:-4)

实际上并不需要一个 - 只需使用时间组件设置为零的日期(即前一天的午夜),或者只是完全忽略时间组件。

例如,您可以使用DateTime.Today来获取今天的日期(而不是DateTime.Now