日期与日期时间


110

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

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

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

Answers:


131

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

您还可以通过检索个别日期属性DayMonthYear


23

我为需要简单日期的时间创建了一个简单的Date结构,而无需担心时间部分,时区,本地vs.utc等。

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

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


2
谢谢!那很有用。
garfbradaz

16

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

如您所料,这意味着您将解决所有伴随的时区问题,即使对于Date对象,您绝对不希望进行任何时区处理。


1
如果您使用DateTime值作为Date,请将Kind设置为UTC。没有时区调整要处理。DateTime日期= DateTime.SpecifyKind(DateTime.Today,DateTimeKind,Utc);
Suncat2000 '16

是的,我可以从经验中得知,将date任何东西用于任何用途都是一个坏主意,除非您100%确信您的应用程序只能在一个时区运行。将所有内容另存为datetime可为您带来两全其美的体验,包括最关键的事情,这是一种轻松的方法,可以避免时区噩梦,如果服务器的时区配置发生了变化……并以您意想不到的方式开始写入数据。 Datetime可以将您保存在那里,date根本无法保存,并且如果您开始date在错误的时区上下文中写下内容,则将变得难以修复。
凯尔西·汉南

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

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;
    }

并公开value您想要的任何东西。


4
我建议您的构造函数将DateTime.Kind设置为,DateTimeKind.Unspecified以便在序列化时将其反序列化而不进行转换(可能会根据时区的不同而更改日期)。
oatsoda 2014年

1
@OffHeGoes将DateTime.Kind设置为DateTimeKind.Utc请勿将其设置为,DateTimeKind.Unspecified因为这将确保它以包含的时区偏移量进行序列化/反序列化!无论时区如何,日历日期都是相同的,因此请不要让系统对其进行调整。
Suncat2000 '16


4

DateTime具有Date属性,可用于隔离日期部分。该的ToString方法也做的到时部分是空的只是显示的日期部分做好。


3

DateTime对象具有一个属性,该属性仅返回值的日期部分。

    public static void Main()
{
    System.DateTime _Now = DateAndTime.Now;
    Console.WriteLine("The Date and Time is " + _Now);
    //will return the date and time
    Console.WriteLine("The Date Only is " + _Now.Date);
    //will return only the date
    Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);
}

这个答案是不正确的。日期返回DateTime的时间设置为0:00:00
Serj Sagan

3

没有 Date类型。

但是你可以使用 DateTime.Date用来获取日期。

例如

DateTime date = DateTime.Now.Date;

有一个Date结构,并且对象可以声明为Date类型。
Kaleb Anderson

@KalebAnderson不在默认实现.NET中,没有。如果您在谈论VB.net日期,那仍然是DateTime。
Nick N.

DateTime.Now.Date与相同DateTime.Today。有一个DateTime.UtcNow将日期时间值返回为世界时(UTC),但是没有适用于Today的UTC等效方法或属性;DateTimeKind.UtcNow.Date是适当的表达。
Suncat2000 '16

2

您可以返回DateTime,其中时间部分为00:00:00,而忽略它。日期将作为时间戳整数进行处理,因此将日期与时间相结合是有意义的,因为无论如何该日期都存在于整数中。


2

为此,您需要使用日期,但忽略时间值。

通常,日期将是DateTime,时间为 00:00:00

DateTime类型具有一个.Date属性,该属性返回DateTime具有如上所述设置的时间值的。


1
public class AsOfdates
{
    public string DisplayDate { get; set; }
    private DateTime TheDate;
    public DateTime DateValue 
    {
        get 
        { 
            return TheDate.Date; 
        } 

        set 
        { 
            TheDate = value; 
        } 
    }    
}

4
给您的答案一些解释会有所帮助。
关西2015年

0

您可以尝试以下方法之一:

DateTime.Now.ToLongDateString();
DateTime.Now.ToShortDateString();

但是BCL中没有“日期”类型。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.