日期与日期时间

MrM*_*MrM 101 .net c# asp.net

我正在开发一个程序,要求返回一个事件的日期.

我正在寻找一个Date,而不是一个DateTime.

是否有只返回日期的数据类型?

Ron*_*erg 121

不,没有.DateTime表示由日期和时间组成的某个时间点.但是,您可以通过Date属性(另一个DateTime时间设置为00:00:00)检索日期部分.

您还可以通过检索个别日期属性Day,MonthYear.

  • 更新:它将在 .NET 6 中出现。它将被称为“DateOnly”和“TimeOnly”。请参阅 https://github.com/dotnet/runtime/issues/49036 以供参考。如果您安装了 .NET 6 预览版 4,就可以尝试使用它。 (2认同)

Cla*_*lay 21

当你需要一个简单的日期而不用担心时间部分,时区,本地和utc等时,我创建了一个简单的Date结构.

Date today = Date.Today;
Date yesterday = Date.Today.AddDays(-1);
Date independenceDay = Date.Parse("2013-07-04");

independenceDay.ToLongString();    // "Thursday, July 4, 2013"
independenceDay.ToShortString();   // "7/4/2013"
independenceDay.ToString();        // "7/4/2013"
independenceDay.ToString("s");     // "2013-07-04"
int july = independenceDay.Month;  // 7
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢!这很有用. (2认同)

Jon*_*upp 14

不幸的是,不在.Net BCL中.日期通常表示为DateTime对象,时间设置为午夜.

你可以猜到,这意味着你周围有所有伴随的时区问题,即使对于Date对象你也绝对不需要时区处理.

  • @KelseyHannan除非您当然要处理“出生日期”或“购买日期”之类的事情,否则您显然不希望事情因为搬家而神秘地改变。就像说,在新西兰处理爱尔兰抵押贷款申请是一个非随机的示例。 (2认同)

Øyv*_*aar 9

创建一个包装类.像这样的东西:

public class Date:IEquatable<Date>,IEquatable<DateTime>
    {
        public Date(DateTime date)
        {
            value = date.Date;
        }

        public bool Equals(Date other)
        {
            return other != null && value.Equals(other.value);
        }

        public bool Equals(DateTime other)
        {
            return value.Equals(other);
        }

        public override string ToString()
        {
            return value.ToString();
        }
        public static implicit operator DateTime(Date date)
        {
            return date.value;
        }
        public static explicit operator Date(DateTime dateTime)
        {
            return new Date(dateTime);
        }

        private DateTime value;
    }
Run Code Online (Sandbox Code Playgroud)

并暴露value你想要的任何东西.

  • 我建议你的构造函数应该将[DateTime.Kind](http://msdn.microsoft.com/en-us/library/system.datetime.kind(v = vs.110).aspx)设置为`DateTimeKind .未指定`以便在序列化时,它可以在不转换的情况下进行反序列化(可以根据时区的不同来更改日期). (4认同)

ste*_*ell 5

Date类型只是VB.NET使用的DateTime类型的别名(就像int变成Integer一样)。这两种类型都具有Date属性,该属性可将时间部分设置为00:00:00的对象返回给您。