.NET Date without Time -是否有一个,或者我不需要一个?[副本]

yrefmtwq  于 2023-06-25  发布在  .NET
关注(0)|答案(7)|浏览(156)

此问题已在此处有答案

A type for Date only in C# - why is there no Date type?(14个回答)
两年前关闭。
我正在做一些领域建模,遇到了一个属性,在我看来,最好是以Date而不是DateTime公开,没有时间组件。
框架中没有这样的类型有什么好的理由吗?在SQL Server中添加Date类型被认为是一个足够好的主意。另外,如果有人知道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);
rwqw0loc

rwqw0loc1#

在这个问题被问到的时候,没有一个,是的,应该有一个。幸运的是,在.NET 6中,我们有DateOnlyTimeOnly
我不相信有一个好的理由,除了the date and time API in .NET isn't very good在我(非常有偏见)的观点。
我是Noda Time项目的主要维护者,该项目包含LocalDateLocalTime,这是一个相当大的类型集的一部分。

c9qzyr3d

c9qzyr3d2#

我创建了一个简单的Date struct,当你需要一个简单的日期,而不用担心时间部分,时区,本地和本地。UTC等。
https://github.com/claycephas/csharp-date

rmbxnbpk

rmbxnbpk3#

在数据库中,存储容量更重要,因此使用比datetime更少空间的date类型可能是有意义的。在应用程序中,很少需要保存这几个字节。
您可以很容易地创建一个Date类型,在DateTime之间进行转换,但只在内部存储日期。类似于:

public struct Date {

  private int _days;

  private Date(int days) { _days = days; }

  public static implicit operator DateTime(Date date) {
    return DateTime.MinValue.AddDays(date._days);
  }

  public static implicit operator Date(DateTime dateTime) {
    return new Date((int)(dateTime - DateTime.MinValue).TotalDays);
  }

}
vhmi4jdf

vhmi4jdf4#

使用ToShortDateString()方法。如果你需要一个网格或其他东西的属性,创建一个只读属性,它只返回yourDate.ToShortDateString(),你就得到了!

n1bvdmb6

n1bvdmb65#

VB.NET有这种类型,Date数据类型。我相信这是作为VB6应用程序代码的一个要求,它包含这种类型,而不是我们在. NET中使用的DateTime类型。

日期数据类型(Visual Basic):

http://msdn.microsoft.com/en-us/library/3eaydw6e(v=vs.110).aspx

oipij1gg

oipij1gg6#

是的,有一个。DateDateTime(VB)和DateTime(C#)都有一个名为Date的函数,它只返回日期/时间的日期部分。
还有一个Time函数,所以你可以同时使用它们,并分别返回日期/时间部分。

vi4fp9gy

vi4fp9gy7#

实际上并不需要一个日期-只需使用时间组件设置为零的日期(即前一天的午夜),或者完全忽略时间分量。
例如,您可以使用DateTime.Today获取今天的日期(而不是DateTime.Now

相关问题