从DateTime只获取没有时间的日期

时间:2014-03-11 08:07:48

标签: c#

我遇到的情况是,我只需从Date获取DateTime

我有DateTime? StartDate属性(Nullable)用于保存日期值

我在下面试过,

var d = Convert.ToDateTime(StartDate).Date;

但它回归我,例如。 6/22/2006 12:00:00AM

执行var d = Convert.ToDateTime(StartDate).Date.ToString("d");

我可以将{d} 6/22/2006 ...但我不想将DateTime?转换为String

是他们在不使用Date的情况下只获得ToString("d")的任何方法吗?

4 个答案:

答案 0 :(得分:10)

使用日期属性获取DateTime实例的Date组件:

var dateAndTime = DateTime.Now;
var date = dateAndTime.Date;

使用此方法,Date属性将在午夜返回日期。因此,在这种情况下,时间部分将是00:00:00。

有几种方法可以获得只是日期部分,但它的返回类型将是一个字符串:

1。)var date=DateTime.Now.ToString("dd/MM/yyyy"); //Can also use .ToString("dd-MM-yyyy");

2。)var dateOnlyString = dateTimeNow.ToShortDateString(); //Return 00/00/0000

参考:here.

答案 1 :(得分:7)

试试这个: string x = DateTime.Now.ToShortDateString()

这将获得给字符串x的日期dd / mm / yy。

答案 2 :(得分:1)

我认为你的问题有点......没什么。

你要求一个没有时间的日期,但得到DateTime,两者都有。在大多数情况下,我真的不认为这应该是一个问题:

如果您创建一个具有特定日期的DateTime,并将其与另一个日期进行比较,并且这两个日期都设置为午夜,那么您的比较将是有效且正确的。例如:

var yesterday = new DateTime(2014, 3, 10);
var today = new DateTime(2014, 3, 11);
var tomorrow = new DateTime(2014, 3, 12);

比较和排序这些将按预期工作,以下情况也将如此:

if(today == DateTime.Today){
    Console.WriteLine("Today is the day!");
}

换句话说,你应该完全没错,只是假装时间部分不存在

此外,当您在OP中触及自己时,如果您想确保避免使用任何时间组件,则可以使用属性Date

// Note the addition of hours, minutes and seconds:
var today = new DateTime(2014, 3, 11, 14, 35, 33); 

if(today == DateTime.Today){
    Console.WriteLine("This never happened...");    
}

if(today.Date == DateTime.Today){
    Console.WriteLine("...But today is still the day!");    
}

答案 3 :(得分:-1)

DateTime确实有日期和时间。您可以自己决定在特定属性中,您永远不会使用日期部分。它只是12:00 AM,但您不会使用它。

在某些情况下,编写自己永远不能保存时间组件的类型会很有用。这是一个开始:

struct Date : IFormattable
{
    readonly DateTime value;
    public Date(DateTime dateAndTime)
    {
        value = dateAndTime.Date;
    }

    public string ToString(string format, IFormatProvider formatProvider)
    {
        return value.ToString(format ?? "d", formatProvider);
    }
    public string ToString(string format)
    {
        return ToString(format, null);
    }
    public string ToString(IFormatProvider formatProvider)
    {
        return ToString(null, formatProvider);
    }
    public override string ToString()
    {
        return ToString(null, null);
    }

    public static implicit operator DateTime(Date date)
    {
        return date.value;
    }
}

字段value确实保留了上午12点的内容,但它是private,并且从外部看不到。 ToString()的重载确保除非请求其他内容,否则Date将以当前文化的短日期格式写出。